如何检查输入是否同时是数字和范围内?蟒



我想同时检查我的输入是否是数字和范围(1,3(,并重复输入,直到得到满意的答案。 现在我以这种方式执行此操作,但是代码并不干净和简单......有没有更好的方法可以做到这一点? 也许有 while 循环?

def get_main_menu_choice():
ask = True
while ask:
try:
number = int(input('Chose an option from menu: '))
while number not in range(1, 3):
number = int(input('Please pick a number from the list: '))
ask = False
except: # just catch the exceptions you know!
print('Enter a number from the list')
return number

将不胜感激的帮助。

我想最干净的方法是删除双循环。但是,如果您同时想要循环和错误处理,无论如何,您最终都会得到一些复杂的代码。我个人会选择:

def get_main_menu_choice():
while True:    
try:
number = int(input('Chose an option from menu: '))
if 0 < number < 3:
return number
except (ValueError, TypeError):
pass
def user_number():
# variable initial
number = 'Wrong'
range1 = range(0,10)
within_range = False
while number.isdigit() == False or within_range == False:
number = input("Please enter a number (0-10): ")
# Digit check
if number.isdigit() == False:
print("Sorry that is not a digit!")
# Range check
if number.isdigit() == True:
if int(number) in range1:
within_range = True
else:
within_range = False
return int(number)
print(user_number())
``

看看这是否有效

def get_main_menu_choice():
while True:
try:
number = int(input("choose an option from the menu: "))
if number not in range(1,3):
number = int(input("please pick a number from list: "))
except IndexError:
number = int(input("Enter a number from the list"))
return number

如果你的整数在 1 到 2 之间(或者它在范围 (1,3((,它已经意味着它是一个数字

while not (number in range(1, 3)):

我会简化为:

while number < 1 or number > 2:

while not 0 < number < 3:

简化版本的代码仅在int(input())周围具有 try-except :

def get_main_menu_choice():
number = 0
while number not in range(1, 3):
try:
number = int(input('Please pick a number from the list: '))
except: # just catch the exceptions you know!
continue # or print a message such as print("Bad choice. Try again...")
return number

如果你还需要对非数字进行验证,你必须添加几个步骤:

def get_main_menu_choice(choices):
while True:
try:
number = int(input('Chose an option from menu: '))
if number in choices:
return number
else:
raise ValueError
except (TypeError, ValueError):
print("Invalid choice. Valid choices: {}".format(str(choices)[1:-1]))

然后,您可以通过传递有效选项列表将其重用于任何菜单,例如get_main_menu_choice([1, 2])get_main_menu_choice(list(range(1, 3))).

我会这样写:

def get_main_menu_choice(prompt=None, start=1, end=3):
"""Returns a menu option.
Args:
prompt (str): the prompt to display to the user
start (int): the first menu item
end (int): the last menu item
Returns:
int: the menu option selected
"""
prompt = prompt or 'Chose an option from menu: '
ask = True
while ask is True:
number = input(prompt)
ask = False if number.isdigit() and 1 <= int(number) <= 3 else True
return int(number)

最新更新