digits = ['1', '2', '3', '4', '5', '6', '7', '8', '9', '0']
def inp():
inp = input('Enter a value: ')
for i in inp:
if i not in digits:
print('Please enter a value from 2 to 100')
inp()
n = int(inp)
if not 2 <= n <= 100:
print('Please enter a value from 2 to 100')
inp()
else:
return n
number = inp()
我無法做到萬無一失:用戶可以輸入一個空字串""或浮點數,它會給出一個錯誤。
例如:如果我進入10.5,然后10再它顯示錯誤10.5不能作為積分值。
如果有一個簡單的函式,比如val()來自 VB6 或 Python 的等效函式,我將不勝感激。
編輯:預期行為:我希望代碼只采用整數值,2 到 100 作為輸入,如果輸入了不正確的值,那么它應該重復直到收到適當的值。
請幫忙。
uj5u.com熱心網友回復:
我發現解決方案是這樣的:
def inp_w():
while True:
try:
inp = round(float(input('Width of the maze (number of blocks): ')))
except:
print('Please enter a value from 2 to 100')
continue
else:
break
if not 2 <= inp <= 100:
print('Please enter a value from 2 to 100')
inp_w()
else:
return inp
a = inp_w()
Thanks to
"https://stackoverflow.com/users/16343464/mozway"
"https://stackoverflow.com/users/13000953/mahrkeenerh"
"https://stackoverflow.com/users/9635106/karl-wilhelm"
"https://stackoverflow.com/users/16601101/jeandemeusy"
uj5u.com熱心網友回復:
你犯了三個錯誤:
- 你以同樣的方式命名了一個方法和一個變數。當涉及到“inp()”時,解釋器不知道該怎么做。您是要呼叫方法“inp”還是變數“inp”?其中之一是不可能做到的,所以它崩潰了。作為良好的實踐,永遠不要為代碼中的不同元素賦予相同的名稱。
- 您缺少字符 '.' 在您的數字串列中。決議字串“10.5”時,它無法識別點,因此崩潰。
- 由于浮點部分,從字串到 int 的轉換無法將“10.5”轉換為 10。所以將其轉換為浮點數而不是整數。
這是一個作業代碼:
valid_chars = ["1", "2", "3", "4", "5", "6", "7", "8", "9", "0", "."]
def input_val():
inp = input("Enter a value: ")
for i in inp:
if i not in valid_chars:
print("Please enter a value from 2 to 100")
return input_val()
n = float(inp)
if not 2 <= n <= 100:
print("Please enter a value from 2 to 100")
return input_val()
return n
number = input_val()
編輯:一個更好的答案,沒有遞回可能是這樣的:
def is_float(string):
try:
float(string)
return True
except:
return False
def input_val(min_val: int, max_val: int):
while True:
inp = input("Enter a value: ")
if not is_float(inp):
print("Please enter a number")
else:
n = float(inp)
if not min_val <= n <= max_val:
print(f"Please enter a value from {min_val} to {max_val}")
else:
break
return n
number = input_val(2, 100)
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/329232.html
