【问题标题】:Code feedback for python guessing gamepython猜谜游戏代码反馈
【发布时间】:2016-11-28 10:21:47
【问题描述】:

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

【问题讨论】:

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


【解决方案1】:

在get_number(level):

  • elif 可用于第一个表达式之后的所有 if 表达式。这将使执行更快,因为在表达式为真的情况下,不得评估后面的表达式。 (guess_number(level) 和 check_guess(guess,number) 也是如此。)
  • elif 可以变成else。
  • get_number() 应该做什么?我想你想写number = get_number(level) 或者你可以为整个语句块使用while 循环。

mainloop() 中的 while 循环应该做什么?您可以通过在其内部调用mainloop() 来实现代码的重复执行。但是,我更喜欢 while 循环而不是您的实现。

如果既没有输入yes 也没有输入no,那么行为是什么(跳出循环并到达mainloop 的末尾?

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

【讨论】:

  • 感谢您的反馈!发表这篇文章后,我意识到区分第一次猜测和后续猜测是多余的,并将代码更改为不再这样做。此外,while 循环的目的是允许在不改变答案(数字)的情况下进行多次猜测。在自身内部调用 mainloop() 允许通过在重新进入 while 循环之前返回数字选择过程来为下一轮游戏选择一个新数字。我实施了您将 if 更改为 elif 的建议!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多