1

我正在 Codecademy 上学习 Python,我应该在显示“你输了”之前给用户 3 次猜测。我认为我的代码允许 3 个条目,但网站显示“糟糕,再试一次!您允许用户 3 次猜测,还是您错误地检测到正确的猜测?” 除非用户在 3 次试验内猜对了。有人可以告诉我有什么问题吗?

from random import randrange
random_number = randrange(1, 10)
count = 0
# Start your game!
guess= int(raw_input("Please type your number here:"))
while count < 2:
    if guess==random_number:
        print "You win!"
        break
    else:
        guess=int(raw_input("Please guess again:"))
        count+=1

else:
    print "You lose!"
print random_number
4

3 回答 3

3

您的循环确实会询问用户三个猜测。(通过运行代码可以很容易地看出——忽略那些告诉您更改循环条件的其他答案,这是错误的解决方案。)

你的循环的问题是一个更微妙的问题:由于它的结构方式,第三个猜测从未被测试过!您可以通过设置random_number为常数并猜错两次来看到这一点,然后在最后一次尝试时猜错;你还是输了。

您最好的选择是使用更直接的循环结构,其中询问和检查发生在循环的同一迭代中。

for attempt in xrange(3):
    guess = int(raw_input("Please enter a number: "))
    if guess == random_number:
        print "You win!"
        break
    print "Wrong! Try again."
else:
    print "You lose! The number was", random_number

如果您想在第二次和后续猜测中使用不同的提示,请尝试以下操作:

prompt = "Please enter a number"
for attempt in xrange(3):
    guess = int(raw_input(prompt + ": "))
    if guess == random_number:
        print "You win!"
        break
    prompt = "Wrong! Try again"
else:
    print "You lose! The number was", random_number
于 2013-09-27T22:45:14.787 回答
2

你需要while count <= 2. 您的计数从 0 开始。然后它会通过循环体一次。然后它会增加到 1。然后它会再次通过你的循环体。最后,一旦它增加到 2,您的while条件评估为 false,并且循环体不会第三次执行。

设置条件时要小心极端情况。:)

于 2013-09-27T22:35:58.413 回答
1

条件应该是:

while count < 3:

为了更容易理解,我建议你开始计数器count = 1并写下这样的条件:

while count <= 3:

现在更清楚的是允许重复 3 次。但是让我们看看为什么你的代码是错误的:

  • count开始于0,确实如此0 < 2,所以我们进入循环
  • 在第一次失败的尝试中,count递增到1,这是真的,1 < 2所以我们再次进入循环
  • 在第二次失败的尝试中,count递增到2,并且不再是这样,2 < 2所以我们退出循环

所以你看,只考虑了两次尝试。

于 2013-09-27T22:35:54.893 回答