2016-07-21 30 views
0
def ask_input(prompt, error): 
    while True: 
     value = input(prompt) 
     try: 
      int(value) > 1 
      break 
     except ValueError: 
      print(error) 
     else: 
      return value 

所以我想進行簡單的功能,如果它integrel和大於1。到目前爲止,功能似乎接受任何我把返回值。我需要做多個循環,或者我可以將兩個語句都集成到while循環中嗎?while循環,直到輸入履行兩個語句

回答

1

使用if聲明:

while True: 
    value = input(prompt) 
    try: 
     if int(value) > 1: 
      return int(value) # return the value if condition met 
    except ValueError as error: 
     print(error) 
+1

不會在秋天雖然情況下,值<1的嘗試後到'else'?在這種情況下應該明確說明'else'要被移除。 –

+0

@tobias_k,你說得對。我修改了代碼。感謝您指點。 – falsetru

+0

謝謝了。添加打印(錯誤)到其他 - 語句,它變成了完全一樣的想法。 –

0

使用嘗試/除了只接受整數。然後使用if條件測試大於1條件的輸入,如果滿足條件則返回該值。在這種情況下,最好使用raw_input(),因爲您希望將整數文字作爲輸入,其中input()也可以評估可能導致未經處理的輸入的表達式。

def ask_input(prompt, error): 
    while True: 
     try: 
      value = int(raw_input(prompt)) 
      if value > 1: # Return the number if it's greater than 1. 
       return value 
     except ValueError: # Catch exception if value is not a base 10 int. 
      print error 
0

您的代碼提示用戶輸入任何可以轉換爲整數的內容,不管它是否大於1,然後返回None。這不是你想要的。

這裏有2個不同的問題:

int(value) > 1 

如果輸入值是不能分析爲一個整數,那麼這將提高你趕上並妥善處理一個ValueError。 如果輸入值可以作爲整數進行分析,那麼int(value)會將其轉換爲一個實際整數,並將其與1進行比較。但是,由於該比較結果未存儲在變量中或被使用,因此完全忽略。

然後,break將立即離開while循環,然後到達ask_input的末尾,而沒有返回語句。因爲tryelse子句將被忽略。

我建議以下代碼:

def ask_input(prompt, error): 
    while True: 
     value = input(prompt) 
     try: 
      if int(value) > 1: 
       return value 
     except ValueError: 
      print(error)