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