【问题标题】:Guess the Number Game with Different Guess Names用不同的猜名字猜数字游戏
【发布时间】:2015-01-26 12:04:04
【问题描述】:

这是我第一次使用 stackoverflow 访问——我是编程新手,正在学习 Python 初学者课程。很高兴开始!

我们的第二个任务要求我们创建著名的猜数字游戏。对于那些已经知道这个游戏的人,我希望对添加到其中的额外部分有所帮助:我们必须列出每个猜测及其各自的顺序。示例输出应如下所示:

  • 我在想一个整数,你有三个猜测。
  • 猜测1:请输入1到10之间的整数:4
  • 你的猜测太小了。
  • 猜测2:请输入1到10之间的整数:8
  • 你的猜测太大了。
  • 猜测3:请输入1到10之间的整数:7
  • 太糟糕了。数量为:5

我已经将代码简化到出现 Guess 1 和 Guess 3 的位置,但我无法让 Guess 2 出现。我一直在修改和替换每个“while”、“if”、“elif”和“else”命令来解决这个问题,但似乎无法提出解决方案!到目前为止,这是我的代码:

def guess():
print ("I'm thinking of an integer, you have three guesses.")
attempts = 0
from random import randint
number = randint(0,10)
guess = eval(input("Guess 1: Please enter an integer between 1 and 10: "))
while guess != number and attempts == 0:
    if guess < number:
        print("Your guess is too small.")
        break
    if guess > number:
        print("Your guess is too big.")
        break
    elif guess == number:
        print("You got it!")
        attempts = attempts + 1
if number != guess and attempts == 1:
    guess = eval(input("Guess 2: Please enter an integer between 1 and 10: "))
    if guess < number:
        print("Your guess is too small.")
    elif guess > number:
        print("Your guess is too big.")
    while guess == number:
        print("You got it!")
        attempts = attempts + 1
elif number != guess and attempts == 2:
    guess = eval(input("Guess 3: Please enter an integer between 1 and 10: "))
    if guess < number:
        print("Too bad. The number is: ", number)
    elif guess > number:
        print("Too bad. The number is: ", number)
    while guess == number:
        print("You got it!")

此代码输出 Guess 1 然后退出。谁能帮我弄清楚如何让 Guess 2 和 3 出现?欢迎所有想法 - 谢谢!

【问题讨论】:

  • 只是一个旁注,你不想使用 eval() 作为输入。如果您将其作为 Web 应用程序运行,则用户可以直接操作服务器。相反,请使用 try & except 和 int(input()) 语句。
  • 这个程序不是为 web 应用程序设计的,所以,目前,我并不担心服务器操作。但是谢谢你的提示!

标签: python python-3.x


【解决方案1】:

您可以大大缩短您的代码,只需在循环中移动输入,并使用范围或用户正确猜测的三个尝试保持循环:

def guess():
    print ("I'm thinking of an integer, you have three guesses.")
    from random import randint
    number = randint(0,10)
    # loop three times to give at most three attempts
    for attempt in range(3):
        # cast to int, don't use eval
        guess = int(input("Guess 1: Please enter an integer between 1 and 10: "))
        if guess < number:
            print("Your guess is too small.")
        elif guess > number:
            print("Your guess is too big.")          
        else: # not higher or lower so must be the number  
            print("You got it!")
            break

最好使用带有try/except 的while 来验证用户输入的数字,循环直到用户使用了3 次尝试或正确猜测:

def guess():
    print ("I'm thinking of an integer, you have three guesses.")
    attempts = 0
    from random import randint
    number = randint(0,10)

    while attempts < 3:
        try:
            guess =int(input("Guess 1: Please enter an integer between 1 and 10: "))
        except ValueError:
            print("That is not a number")
            continue
        if guess < number:
            print("Your guess is too small.")
            attempts += 1
        elif guess > number:
            print("Your guess is too big.")
            attempts += 1
        else: # if it is a number and not too high or low it must be correct
            print("You got it!")
            break # break the loop

如果您真的想向用户反馈他们的猜测是太低还是太高,您不能只使用if/else

正如评论中所说,不要使用 eval。概述了here

的一些充分理由

【讨论】:

  • 感谢您的提示!你的评论真的很有帮助。在旁注中,我们的教授只教了我们几个命令,eval 就是其中之一。我想她希望我们在最初的几个编码任务中使用 eval 来理解评估输入的整个概念......但我会在以后的代码中记下这一点。
  • 没有问题,教授使用 eval 很奇怪,它很少使用,尤其是在接受用户输入时。
【解决方案2】:
  1. 您所有的 while guess!=number and attempts == 循环都是无用的,因为您要么将 break 退出它们,要么递增 attempts,因此它们的条件在第一次迭代后评估为 False
  2. 猜测 2 永远无法达到,因为 number 等于 guess(所以 number != guessFalse)或 attempts 仍然为零。
  3. 出于同样的原因,永远无法达到猜测 3。但是,如果会达到猜测 2,则将永远不会达到猜测 3,因为您将 elif 放在前面。

尝试去掉猜测 2 和猜测 3 的代码。编写 guess = eval(input())if guess &lt; number: ... elif guess &gt; number: ... 的所有代码一次,并将其放入循环中。这里有一些伪代码来说明这个想法:

while attempts < 3
    ask for user input
    if guess equals number
        print "you win"
        exit the loop
    else
        print "that's wrong"

【讨论】:

    【解决方案3】:

    我使用了“连接”方法以及您的一些有用的响应想法,终于让我的代码工作了!!非常感谢大家的帮助,非常感谢!!下面是这个程序的正确代码:

    def guess():
    from random import randint
    number = randint(0,10)
    print("I'm thinking of an integer, you have three guesses.")
    attempts = 0
    while attempts < 2:
        guess = eval(input("Guess " + str(attempts + 1) + ": Please enter an integer between 1 and 10: "))
        if guess < number:
            print("Your guess is too small.")
            attempts += 1
        elif guess > number:
            print("Your guess is too big.")
            attempts += 1
        else:
            print("You got it!")
            break
    
    else:
        attempts == 3
        guess = eval(input("Guess 3: Please enter an integer between 1 and 10: "))
        if guess < number:
            print("Too bad. The number is: ", number)
        elif guess > number:
            print("Too bad. The number is: ", number)
        else:
            print("You got it!")
    

    然后以调用函数(“guess()”)结束它。希望这对将来遇到此问题的人有用。再次感谢你们!

    【讨论】:

      猜你喜欢
      • 2021-11-20
      • 2016-06-21
      • 2013-10-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多