2015-09-30 51 views
0

參加一個介紹課程並需要創建一個過度/不足猜測遊戲。如果有人輸入負數或非整數,我想通過創建錯誤來微調用戶輸入。我正確地報告了非整數錯誤,並且負循環正確返回,但負數不會打印我的錯誤消息。Python3:爲負輸入創建錯誤

#Number of plays 
def get_plays(msg): 
    while True: 
     try: 
      x = (int(input(msg))) 

     except ValueError: 
      print ("Integer numbers only please.") 
     except: 
      if x <=0: 
       print ("Positive numbers only please.") 

i = get_plays("\nHow many times would you like to play?") 
print ("The game will play " +str(i)+" times.") 

另外,如果我想使用類似的設置來產生1到20之間的任何負非整數的錯誤,怎麼會變成這樣看?

+0

1之間唯一的正數爲輸入什麼你到底想'不同的是:'塊將被執行? –

+0

可能將'if'語句移動到'try'部分。 – luoluo

回答

0

嘗試:

def get_plays(msg): 
    while True: 
     try: 
      x = (int(input(msg))) 
      if x <=0: 
       print("Positive numbers only please.") 
       continue 
      if x not in range(20): 
       print("Enter a number between 1 - 20.") 
       continue 
      return x 
     except ValueError: 
      print("Integer numbers only please.") 

將接受20

+0

是,第二部分就是這樣!正好符合我的想法,只是花了太多時間看代碼纔看到我的錯誤。謝謝! – catalyst123

0

問題是這部分

except: 
    if x <=0: 

except條款上還沒有被抓到還沒有任何錯誤引發,但負數不會引發異常。你想要這樣的東西。請注意,在try子句中,我們可以像x已經是int一樣繼續,因爲我們可以假設沒有ValueError被拋出。

def get_plays(msg): 
    while True: 
     try: 
      x = (int(input(msg))) 
      if x <=0: 
       print ("Positive numbers only please.") 
      else: 
       return x 

     except ValueError: 
      print ("Integer numbers only please.") 
+0

是的,這就是我正在看/爲!正好符合我的想法,只是花了太多時間看代碼纔看到我的錯誤。謝謝! – catalyst123