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

时间:2015-12-28 05:22:25

标签: python

当我运行该程序时,我遇到了这个问题,一切都很顺利,但是当用户得到正确的答案时,代码不打印任何打印(" 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")

5 个答案:

答案 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 >>")