当我运行该程序时,我遇到了这个问题,一切都很顺利,但是当用户得到正确的答案时,代码不打印任何打印(" Good Job!")或打印("正确&#34)。代码有什么问题?
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("\n\n Press to exit")
答案 0 :(得分:18)
问题是只要第一个答案错误,你的while循环才会运行。如果第一个答案是正确的,Python将忽略while (userAnswer != result)
之后缩进的所有内容。因此,从逻辑上讲,第一个正确的答案永远不会达到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将它视为“一件事”并且如果我用错误的东西开始它就跳过它。
答案 1 :(得分:3)
如果答案是正确的,那么
scope: false
将导致跳过循环内容。
答案 2 :(得分:2)
如何使用这样的无限while循环:
while (True) :
userAnswer = int(input("Your answer : "))
if (userAnswer == result):
print("Correct")
print("Good Job!")
break
else:
print ("Wrong answer")
在您的逻辑中,如果您第一次输入错误的答案并在之后正确回答,那么它将按照您的要求工作,但如果您第一次输入正确的答案,它将简单地跳过while循环。
答案 3 :(得分:2)
首先,您可以在循环中输入 ,然后不要对其进行任何操作。如果第一次尝试的答案是正确的,那么您将无法获得输出,因为userAnswer != result
会立即False
并且您的while
循环不会运行。
其他一些观点:
if (userAnswer > result) :
print("Wrong")
else:
print("Wrong")
是多余的,因为您可以保证属于其中之一,因为只有在答案错误时才会到达此处(因此>
或< result
)。只需打印"Wrong"
没有条件,因为这样做的唯一原因是答案是错误的。
print("Correct")
print("Good Job!")
您可以使用\n
在新行上打印,而不是一起使用多个print
语句。通常,为了便于阅读,您只能使用多个print
,但print("Correct\nGood 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)
结果(双关语)已经是一个整数,所以你不需要转换它。
答案 4 :(得分:1)
我玩了一些重构,试图让它更清晰:
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 >>")