2015-12-28 38 views
0

我有這個問題,當我運行程序時,它一切都變好,但是當用戶得到正確的答案時,代碼不會打印既不打印(「好工作!」)或打印(「正確」)。代碼有什麼問題?我的python代碼不會在循環結束時運行打印語句

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

回答

18

的問題是,你的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當然還是真。所以你再試一次,直到你得到正確的答案,這會帶給你「正確的,好的工作」,然後中斷(停止循環)。

我在while循環中掙扎,還有一種讓我頭腦中的縮進意味着Python將它視爲「一件事」,如果我用False開始,它會跳過它。

+0

這應該是被接受的答案。它清楚地解釋了問題並顯示瞭解決問題的方法。 – Insomniac

3

如果答案是正確的,那麼

while (userAnswer != result) : 

將導致跳過循環的內容。

2

如何使用一個無限while循環是這樣的:

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

在你的邏輯,如果你輸入了錯誤的答案第一時間和正確答案之後,那麼它會工作按您的要求,但如果你第一次輸入正確的答案它會簡單地跳過while循環。

2

首先,你得到輸入外部你的循環,然後不要做任何事情。如果您的答案在第一次嘗試時是正確的,您將無法獲得輸出,因爲userAnswer != result將立即變爲False,並且您的while循環將不會運行。

的其他一些觀點:

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

是多餘的,因爲你肯定落入其中的一個,因爲你只會得到這裏如果答案是錯的(因此>< result)。只需在沒有條件的情況下打印"Wrong",因爲這樣做的唯一原因是答案錯誤。

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

您可以使用\n到一個新行打印,而不必多print語句一起。通常情況下,您只能同時使用多個print s以提高可讀性,但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) 

結果(雙關不是意圖)已經是一個整數,所以你不需要轉換它。

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