2016-04-29 41 views
-2

我是新來的編碼,並一直沿着自動化鏜孔與Python的東西。最新的項目正在編寫一個Collat​​z序列,這是相當直接的。但是,我一直無法弄清楚如何通過try和except來添加輸入驗證。Collat​​z - 輸入驗證

由於try和except必須位於循環內部,所以在輸入階段之前會發生錯誤 - int(input())。但是,如果我在while循環中添加輸入,它會在每個循環後要求我輸入新的輸入。

是否有一種簡單的添加方式,除非有輸入無效,錯誤消息顯示並等待新輸入?提前致謝。

print('Hello, please input an integer.') 
number = int(input()) 

while number != 1: 
     if number % 2 == 0: 
     print(number // 2) 
     number = number // 2 
     elif number % 2 == 1: 
     print(3 * number + 1) 
     number = 3 * number + 1 
+0

你需要*兩單獨的循環*,甚至單獨的功能。 – jonrsharpe

回答

0

您可以創建一個單獨的功能與驗證一起處理整數輸入,並把它作爲很多時候你想,在這裏:

def accept_int(): 
    while True: 
     try: 
      num=int(input()) 
      break 
     except: 
      print("An error occured, please re-enter!") 
      continue 
    return num 

print('Hello, please input an integer.') 
number = accept_int() 

while number != 1: 
     if number % 2 == 0: 
     print(number // 2) 
     number = number // 2 
     elif number % 2 == 1: 
     print(3 * number + 1) 
     number = 3 * number + 1 

輸出:

$ python3 d.py 
Hello, please input an integer. 
abcd 
An error occured, please re-enter! 
23.5 
An error occured, please re-enter! 
32 
16 
8 
4 
2 
1 
$ 
+0

非常感謝 - 這正是我想要做的。我不確定我是否理解附加代碼 - 雖然我明白它的作用,但我不明白如何通過輸入一個整數來調用accept_int()。 –

+0

該函數通過「number = accept_int()」以某種方式調用,是否正確?關於輸出,返回的「數字」成爲一個全局變量,然後由我的原始代碼使用? –

+0

是的,我們從函數返回一個值到它被調用的地方,並且該值被分配給'number' – ritesht93