python猜谜游戏的代码反馈

时间:2016-07-25 07:06:56

标签: python python-3.x random while-loop feedback

我是Python的新手(一般编码),经过大约一周的阅读“像计算机科学家一样思考:用Python学习”,我决定尝试构建一个经典的“猜谜游戏”版本。我添加了一些额外的功能,例如计算用户猜测的数量,以及与模拟的“计算机”播放器对战以使程序稍微有趣。此外,计算机所采取的猜测次数是基于猜测给定范围内的数字所需的猜测的平均数(对于范围n而言是基数2的对数)并且根据标准偏差而变化。任何有关我的代码结构的反馈或我生成计算机猜测数量的方式都将非常感激!!!

Anywayyysss ....这是我的代码

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()

1 个答案:

答案 0 :(得分:0)

get_number(level)

  • elif可用于第一个之后的所有if个表达式。这将使执行更快,因为在表达式为真的情况下,不能计算后面的表达式。 (guess_number(level)check_guess(guess,number)中相同。)
  • elif可以设为else
  • get_number()应该做什么?我想你想写number = get_number(level)或者你可以在整个语句块中使用while循环。

while中应该做的mainloop()循环是什么?您可以通过在自身内部调用mainloop()来实现代码的重复执行。但是,我更倾向于while循环来反对您的实现。

如果既没有输入也没有输入,那么是beaviour(突破循环并到达mainloop预期的结尾?

为什么要区分第一次猜测和后来的猜测?它们可以用相同的代码处理。