2016-01-06 66 views
-1

我試圖通過鍵入'退出'退出下面的代碼塊。由於將輸入語句的格式設置爲整數,導致出現錯誤。我能夠利用try和but除掉錯誤,但是我仍然無法將'exit'識別爲輸入,因爲所有非整數輸入都會導致代碼塊底部的else print語句包括'出口'。如果除了ValueError之外的其他工作python3(初學者)

除了ValueError之外,是否有方法可以評估變量?

import sys 
import pdb 
from random import choice 

random1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12] 
random2 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12] 

while True: 
    print("To exit this game type: 'exit'") 
    num1 = choice(random2) 
    num2 = choice(random1) 

    try: 
     answer = int(input("What is {} times {}? :" .format(num1,\ 
     num2))) 

     if answer == num1 * num2: 
      print("Correct Choice!") 

     else: 
      print("WRONG") 

    except ValueError: 
     if answer == 'exit': 
      print("Now exiting the game") 
      sys.exit() 
     else: 
      print("that answer is not valid try again") 

`

回答

0

我看到會分裂你的輸入線的最快方法:

raw_answer = input("What is {} times {}? :" .format(num1, num2)) 
try: 
    answer = int(raw_answer) 
except ValueError: 
    if raw_answer == 'exit': 
     print("Now exiting the game") 
     sys.exit() 
    else: 
     print("that answer is not valid try again") 

這樣你原來的答案存到自己的輸入,同時仍使用ValueError異常退出程序。

或者,你可以檢查raw_answer == 'exit'第一,事後用int() ...

+1

這種技巧正是我一直在試圖找出和完美。謝謝! – JimmyF

1

如果ValueError被拋出調用int(最有可能的地方),然後answer不會有分配給它的又一個新的價值。它怎麼可能?它沒有嘗試在任何分配發生之前將"exit"(或其他)轉換爲int。要解決,你會想嘗試類似:

# Get the raw string 
answer = input("What is {} times {}? :" .format(num1, num2)) 
# Convert to int; if it fails, the raw string is left in answer 
answer = int(answer) 

這樣一來,原來的串仍處於answer如果int提高ValueError