2017-03-03 88 views
0

我有一個學校的任務(好吧,這是額外的功勞,是確切的)我需要使用函數來檢查輸入的值是否是整數。 這是功能我的老師希望我們用下手:Python enterInteger函數 - 檢查有效整數

def enterInteger(): 
enteredValue = input(‘Please enter an Integer:’ 
return int(enteredValue) 
  • 沒有參數
  • 將返回一個有效的整數
  • 將循環,直到輸入有效的整數
  • 提供關於爲什麼輸入錯誤的錯誤消息
  • 無論輸入什麼,它都不會崩潰
  • 如果它進入無限循環,它不工作!

我試着搞亂了一堆不同的代碼,但無濟於事。這是代碼我經歷過最多的運氣(這是超級馬虎,我知道我已經沒有太大的教學編碼的Python 3周左右爲止。):

def enterInteger(): 
    check = 0 
    enteredValue = input('Please enter an Integer: ') 

    while check == 0: 
     if "." in enteredValue: 
      print("The entered value has a decimal! Not an integer!") 
      return 

     elif "\\" in enteredValue: 
      print("The entered value is a fraction! Not an integer!") 
      return 

     elif "/" in enteredValue: 
      print("The entered value is a fraction! Not an integer!") 
      return 
     else: 
      return int(enteredValue) 
      enteredValue = 0 
      check = 1 

check = enterInteger() 

if type(check) is int: 
    print("The entered value is an integer!") 
else: 
    enterInteger() 

當我運行這一點,輸入一個真正的整數,它工作正常,但如果我輸入一個非整數,它不會正確進入循環。如果我輸入一個非整數後跟一個整數,它也不起作用。

任何幫助,我可以得到將非常感謝!

+0

你可能想看看'try';可以使這個既簡單又有效。 –

+0

你爲什麼使用'while'循環?你回到每一個你的分支,所以它只能迭代一次... –

回答

1

return導致函數立即終止。您返回if-elif-else塊的每個分支,因此您的循環永遠不會執行多次。

最直接的解決方案是刪除除return int(enteredValue)之外的所有return。您還需要在循環內移動input調用,因爲您希望它們在失敗後重新輸入值。

def enterInteger(): 
    check = 0 

    while check == 0: 
     enteredValue = input('Please enter an Integer: ') 
     if "." in enteredValue: 
      print("The entered value has a decimal! Not an integer!") 
     elif "\\" in enteredValue: 
      print("The entered value is a fraction! Not an integer!") 

     elif "/" in enteredValue: 
      print("The entered value is a fraction! Not an integer!") 
     else: 
      return int(enteredValue) 
      enteredValue = 0 
      check = 1 

check = enterInteger() 

if type(check) is int: 
    print("The entered value is an integer!") 
else: 
    enterInteger() 

一對夫婦更多的改進:有有代碼並不多點return後,因爲它永遠不會得到執行,因此你不妨刪除enteredValue = 0check = 1。而且由於check現在總是爲零,所以你可以讓循環無條件。並且enterInteger總是返回一個整數,所以檢查check是一個整數沒有意義。

def enterInteger(): 
    while True: 
     enteredValue = input('Please enter an Integer: ') 
     if "." in enteredValue: 
      print("The entered value has a decimal! Not an integer!") 
     elif "\\" in enteredValue: 
      print("The entered value is a fraction! Not an integer!") 
     elif "/" in enteredValue: 
      print("The entered value is a fraction! Not an integer!") 
     else: 
      return int(enteredValue) 

check = enterInteger() 

這仍然不滿足「不能不管輸入什麼崩潰」的要求,雖然 - 例如,如果用戶輸入「你好」,或點擊CTRL-C。您可能需要查看異常處理以涵蓋這些情況。

+0

是的,我有一些腳本來處理字母或字符,所以這不會是一個問題。我感謝幫助的人。我似乎總是讓我的Python腳本過於複雜。 – Dylan