[英]limiting invalid input in python 3
我需要限制允許的無效輸入的數量,以便在給定的嘗試次數后,程序退出。
無效由輸入小於零定義。
可以說的嘗試次數為3。
def number():
number = float(input('please enter a number (must be greater thatn zero): '))
if number >= 0 :
print ('you choose number:', number)
else:
print ('invalid input')
return
number()
我將如何限制無效輸入嘗試的次數並使其無效,以使代碼返回到再次詢問問題並提示輸入,但仍跟蹤先前的嘗試?
您必須使用循環 ,在這種情況下, while
循環將很方便。 您必須聲明一個變量invalid_attempts
以保持用戶給定的無效輸入的數量。
完成循環的條件將是當invalid_attempts
大於或等於3
時,它會在獲得無效輸入時增加。 您可能需要更改3
以適合您的要求:
def get_input():
invalid_attempts = 0
while invalid_attempts < 3:
number = float(input('please enter a number (must be greater thatn zero): '))
if number >= 0 :
print ('you choose number:', number)
return number # so you can call the method as 'some_variable = get_input()'
else:
print ('invalid input')
invalid_attempts += 1
注意:由於number
是方法的名稱,因此您不應在內部使用相同的名稱調用變量(因為如果這樣做,則在必要時將無法在內部使用該函數),在這種情況下,正在調用方法get_input
。
在數字= ...之前使用whilie循環,例如:
count = 0
while count < 3:
# do rest of the stuffs
count += 1
您還可以使用遞歸更優雅地做到這一點:
def get_number(max_tries, count = 0)
if count < max_tries:
valid_input = False
number = 0
try:
number = float(input('Please enter a number > 0'))
if number > 0:
valid_input = True
except:
pass
if valid_input:
return number
else:
return get_numbers(max_tries, count+1)
else:
print('Sorry, Too many Tries!)
return None
是否使用while循環或遞歸通常取決於您的口味。 在許多情況下,它們在功能上是等效的。 此示例還說明了如果用戶輸入的數字不是數字會發生什么,這將導致float轉換拋出。
更新:要澄清OP提出的問題:
def get_numbers(max_tries, count = 0)
定義一個函數get_numbers
,該函數接受兩個輸入max_tries
和count
。 count
被賦予默認值count = 0
,這意味着如果您在不指定count
參數的情況下調用該函數,它將自動將其分配為0
。 max_tries
沒有默認值,這意味着您每次調用函數時都需要指定它,否則python會拋出錯誤。 如果通常具有相同的最大嘗試次數,則還可以為其指定一個默認值,這將使您可以簡單地執行number = get_numbers()
並使它按預期工作。
遞歸 ,過度簡化,基本上是函數在執行過程中調用自身時。 假設我們做了以下工作:
number = get_number(10)
然后用戶輸入-1,這將導致代碼達到:
else:
return get_numbers(max_tries, count+1)
由於我們說過get_numbers(10)
, max_tries = 10
, count = 0
,所以這一行變成:
else:
return get_numbers(10, 1)
這將導致函數再次返回調用get_numbers
的結果。 最終,用戶將輸入有效輸入,或者count > max_tries
,這將導致該函數最終返回一個值。
閱讀我喜歡的Wiki,如果不繪制遞歸就很難解釋,但是希望可以有所幫助。
實際上,我認為for
循環看起來更好:
for retry in range(5): # number of retries
try:
choice = float(input('please enter a number (must be greater thatn zero): '))
except ValueError:
print('Please enter an actual number')
continue
if choice >= 0:
print('You chose ', choice)
break
else:
print('Number must be >= 0')
continue
else:
print('Too many failures: be more cooperative')
(這稱為for-else
構造; else
僅在for
循環未break
)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.