2016-07-25 12 views
-2

저는 파이썬 (그리고 일반적으로 코딩)을 처음 사용하고 "컴퓨터 과학자처럼 생각하기 : 파이썬으로 학습하기"라는 책을 읽은 지 약 1 주일이 지난 후에 고전적인 "추측 경기". 사용자가 추측하는 추측 횟수를 계산하고 시뮬레이트 된 "컴퓨터"플레이어를 상대로 게임을 재미있게 만드는 등 몇 가지 추가 기능을 추가했습니다. 또한 컴퓨터가 취하는 추측의 수는 주어진 범위 (n 범위의 기본 2의 대수)에있는 숫자를 추측하는 데 필요한 추측의 평균 횟수를 기반으로하며 표준 편차에 따라 다릅니다. 내 코드의 구조에 대한 피드백이나 컴퓨터가 취하는 추측의 수를 생성하는 방식에 대해 많은 의견을드립니다 !!!파이썬 추측 게임에 대한 코드 피드백

Anywayyysss는 .... 여기 get_number(level)에서 내 코드

import random 


def get_number(level):     #selects a random number in range depending on difficulty selected 
    if level == "e": 
     number = random.randint(1,20) 
    if level == "m": 
     number = random.randint(1,100) 
    if level == "h": 
     number = random.randint(1,1000) 
    elif level != "e" and level != "m" and level != "h": 
     print ("Invalid input!") 
     get_number() 
    return number 


def select_level():     #prompts the user to select a difficulty to play on 
    level = str(input("Would you like to play on easy, medium, or hard? \n" 
         "Type 'e' for easy, 'm' for medium, or 'h' for hard!\n")) 
    return level 


def guess_number(level):  #function that prompts the user to guess within range depending on chosen difficulty 
    if level == "e": 
     guess = int(input("Guess a number between 1 and 20:\n")) 
    if level == "m": 
     guess = int(input("Guess a number between 1 and 100:\n")) 
    if level == "h": 
     guess = int(input("Guess a number between 1 and 1000:\n")) 
    return guess 


def check_guess(guess,number):   #processes the users guess and evaluates if it is too high, too low, or bang on 
    if guess > number: 
     print ("your guess is too high! Try again! \n") 
    if guess < number: 
     print ("your guess is too low! Try again! \n") 
    if guess == number: 
     print("\n{0} was the number!".format(number)) 


def com_num_guesses(level):   #function to get the number of guesses taken by the computer 
    if level == "e": 
     com_guesses = round(random.normalvariate(3.7,1.1)) 
    if level == "m": 
     com_guesses = round(random.normalvariate(5.8,1.319)) 
    if level == "h": 
     com_guesses = round(random.normalvariate(8.99,1.37474)) 
    print("The computer guessed the number in {0} guesses! Can you beat that?".format(com_guesses)) 
    return com_guesses 


def mainloop(): 
    level = select_level() 
    number = get_number(level) 
    com_guesses = com_num_guesses(level) 
    guess = guess_number(level) 
    check_guess(guess,number) 
    num_guesses = 1 
    if guess == number:   #tells program what to do if first guess is correct 
     print("You got it in {0} guesses.".format(num_guesses)) 
     if num_guesses == com_guesses: 
      print("It took the computer {0} guesses too!\nIt's a tie!\n".format(com_guesses)) 
     if num_guesses > com_guesses: 
      print("It took the computer {0} guesses.\nThe computer wins!\n".format((com_guesses))) 
     if num_guesses < com_guesses: 
      print("It took the computer {0} guesses.\nYou win!\n".format(com_guesses)) 
     play_again = str(input("To play again type 'yes'. To exit type 'no'. \n")) 
     if play_again == "yes": 
      mainloop() 
     if play_again == "no": 
      raise SystemExit(0) 
    while True:     #tells program how to handle guesses after the first guess 
     guess2 = guess_number(level) 
     check_guess(guess2,number) 
     num_guesses += 1 
     if guess2== number: 
      print("You got it in {0} guesses.".format(num_guesses)) 
      if num_guesses == com_guesses: 
       print("It took the computer {0} guesses too!\nIt's a tie!\n".format(com_guesses)) 
      if num_guesses > com_guesses: 
       print("It took the computer {0} guesses.\nThe computer wins!\n".format((com_guesses))) 
      if num_guesses < com_guesses: 
       print("It took the computer {0} guesses.\nYou win!\n".format(com_guesses)) 
      play_again = str(input("To play again type 'yes'. To exit type 'no'. \n")) 
      if play_again == "yes": 
       mainloop() 
      if play_again == "no": 
       raise SystemExit(0) 
      break 





mainloop() 
+8

코드 검토에 더 적합 - http://codereview.stackexchange.com/ –

+1

이 질문에 대한 답변은 [codereview.se]에 속하기 때문에 닫습니다. – Sayse

답변

0

입니다 :

  • elif는 처음 결국 if 표현에 사용될 수 있습니다. 표현식이 참인 경우 나중에 표현식을 평가해서는 안되기 때문에 이렇게하면 실행이 빨라집니다. (guess_number(level)check_guess(guess,number)에서 동일 함)
  • elifelse 일 수 있습니다.
  • get_number()은 무엇이 있나요? 나는 당신이 number = get_number(level)을 쓰고 싶다고 생각한다. 또는 문장 전체 블록에 대해 while 루프를 사용할 수있다.

mainloop()에있는 while 루프는 무엇입니까? 자체 내에 mainloop()을 호출하여 코드를 반복 실행합니다. 그러나 귀하의 구현에 대해 while 루프를 선호합니다.

는 beaviour 경우 어느 쪽도하지 예 또는 아니오 입력 (루프의 돌발 의도 mainloop의 끝 부분에 점점?

를 첫 번째 추측 구분하는 이유는 무엇이며, 나중에 그들은으로 처리 할 수 ​​있을까? 추측

+0

의견에 감사드립니다 이 게시물을 작성한 후에는 첫 번째 추측과 후속 추측을 구별하는 것이 불필요하다는 것을 인식하고 더 이상이 작업을 수행하지 않도록 코드를 변경했습니다. f while 루프는 응답 (번호)이 변경되지 않고 여러 추측이 가능하도록합니다. mainloop() 자체를 호출하면 while 루프를 다시 시작하기 전에 번호 선택 프로세스로 돌아가서 다음 번 게임에서 새 번호를 선택할 수 있습니다. 나는 엘프의 것을 바꾸기 위해 당신의 제안을 구현했습니다! –