我的python代码不会在循环结束时运行print语句



我在运行程序时遇到了这个问题,一切都很好,但当用户得到正确的答案时,代码既不会打印("干得好!")也不会打印(("正确")。代码出了什么问题?

import random
firstNumber = random.randint(1, 50)
secondNumber = random.randint(1, 50)
result = firstNumber + secondNumber
result = int(result)
print("Hello ! What's your name ? ")
name = input()
print("Hello !"+" "+ name)
print("Ok !"+" "+ name +" "+ "let's start !")
print("What is"+ " " + str(firstNumber) +"+"+ str(secondNumber))
userAnswer = int(input("Your answer : "))
while (userAnswer != result) :
    if (userAnswer > result) :
        print("Wrong")
    else:
        print("Wrong")
    userAnswer = int(input("Your answer : "))
    if (userAnswer == result):
        print("Correct")
        print("Good Job!")
        break
input("nn Press to exit")

问题是while循环只有在第一个答案错误时才会运行。如果第一个答案正确,那么while (userAnswer != result)后面缩进的所有内容都将被Python忽略。因此,从逻辑上讲,第一个正确的答案永远不会到达print("Correct"),因为这需要答案既是错误的(开始while循环)又是正确的(达到"正确")。

一种选择是去掉while循环,只使用if。这样你有两次机会,然后你就输了。

if (userAnswer == result):
    print("Well done!")
else:
    print("Wrong")
    userAnswer = int(input("Your answer : "))
    if (userAnswer == result):
        print("Correct")
        print("Good Job!")
    else:
        print("Nope all wrong you lose")

另一种选择是使用While进行无限循环。(就像@csharpcoder说的)

while (True) :
    userAnswer = int(input("Your answer : "))
    if (userAnswer == result):
        print("Correct")
        print("Good Job!")
        break
    else:
        print ("Wrong answer")

在最后一个选项中,一个错误的答案得到"错误的答案",while循环再次开始,因为True当然仍然为True。所以你再试一次,直到你得到正确的答案,这会让你"正确,做得好",然后打破(这会停止循环)。

我很难处理while循环,我脑子里有点明白,缩进意味着Python会把它当作"一件事",如果我用False开头,就会跳过它。

如果答案正确,则

while (userAnswer != result) :

将导致跳过循环内容。

首先,在循环的外部获得输入,然后不要对其执行任何操作。如果第一次尝试时答案正确,则不会获得输出,因为userAnswer != result将立即变为False,并且while循环不会运行。

其他几点:

if (userAnswer > result) :
    print("Wrong")
else:
    print("Wrong")

是多余的,因为你肯定会陷入其中之一,因为只有在答案错误的情况下(因此是>< result),你才会到达这里。只需在没有条件的情况下打印"Wrong",因为运行该程序的唯一原因是如果答案是错误的。

print("Correct")
print("Good Job!")

您可以使用n在新行上打印,而不是将多个print语句放在一起。通常,为了可读性,您只将多个print一起使用,但print("CorrectnGood job!")的可读性并没有那么差。

if (userAnswer == result):
    #...
    break

这里不需要break,因为答案已经正确,循环无论如何都不会重复。

print("Hello !"+" "+ name)
print("Ok !"+" "+ name +" "+ "let's start !")
print("What is"+ " " + str(firstNumber) +"+"+ str(secondNumber))

在这里,将字符串文字附加到字符串文字("Hello!" + " ")。您不需要这样做,因为您只需编写"Hello! "即可。

result = firstNumber + secondNumber
result = int(result)

结果(双关语不是有意的)已经是一个整数,所以你不需要转换它。

使用一个类似这样的无限while循环怎么样:

while (True) :
    userAnswer = int(input("Your answer : "))
    if (userAnswer == result):
        print("Correct")
        print("Good Job!")
        break
    else:
        print ("Wrong answer")

在你的逻辑中,如果你第一次输入错误的答案,然后输入正确的答案,那么它将按照你的要求工作,但如果你第一时间输入正确的回答,它将简单地跳过while循环。

我试着做了一些重构,试图让它更清楚:

import random

name = input("Hello ! What's your name? ")
print("Hello, {name}!".format(name=name))
print("Ok, {name}, let's start!".format(name=name))
first_number = random.randint(1, 50)
second_number = random.randint(1, 50)
correct_answer = first_number + second_number
print("What is, '{first} + {second}'?".format(first=first_number,
                                              second=second_number))
user_answer = None
while user_answer != correct_answer:
    try:
        user_answer = int(input("Your answer : "))  # ValueError will be raised if non integer value given
    except ValueError:
        print("Invalid Input!")
        user_answer = None
    if user_answer:
        if user_answer == correct_answer:
            print("Correct")
            print("Good Job!")
        else:
            print('--> Wrong, try again!')
input("n<< Press any key to exit >>")

最新更新