如何解决如何将输入限制为数字范围? 旧答案
我想将输入限制为数字范围(例如n)。
如果我使用while x not in range(n): x = input()
,则无法正常工作。
所以我放了while x not in range(n): x = int(input())
。
除非我不给任何字母,否则它工作正常。
经过一番研究,我想到了以下代码:
x = None
while True:
try:
while x not in range(n+1):
x = int(input("X (1 to "+ str(n)+ ") :"))
if x not in range(n+1):
print("please enter a valid input")
break
except:
print("please enter a valid input")
我想知道是否有任何方法可以缩短代码,例如合并while循环and
或or
。
解决方法
编辑。忘记了x = 0
while True:
try:
x = int(input("Enter a number"))
except:
print("Please enter a valid input")
if x not in range(n+1):
print("Please enter a valid input")
else:
break
。最佳做法是明确捕获var label1 = label.new(bar_index,high,"",style=label.style_circle)
label.set_xloc(label1,time,xloc.bar_time)
label.set_text(label1,text=tostring(diff))
label.set_y(label1,highest(10)[1] + tr[1])
而不是ValueError
,因为ValueError
也可能捕获其他内容。
您可以使用内置的比较功能快速测试代码。
作为奖励,我使用了易于理解的f弦。
Exception
,
我假设您想要一个从0到Class<?>
的数字,因为您使用的是private static List<Class<?>> fooList_StreamEx_Solved(List<Integer> input) {
return StreamEx.of(input)
.<Class<?>>map(x -> foo())
.toList();
}
,它从0到n
。如果您希望数字从1到range(n+1)
,请使用n
n
,
您可以使用更通用的方法来实现它:
def get_valid_input(input_message,validator_fn=None):
while True:
try:
i = input(input_message)
if validator_fn is None or validator_fn(i):
return i
except:
print("please enter a valid input")
x = get_valid_input('X (1 to ' + str(n) + ') :',lambda i: x in range(n + 1))
get_valid_input
将在返回输入之前先对其进行验证,这样,您也可以对其他输入使用相同的方法。
也许您可以执行以下操作:
while True:
if len(input()) > 20:
print('please input valid input')
len()
将返回input()
返回的字符串的长度。
您还可以使用lambda对其进行简化并使其更具动态性:
fun = lambda y,x: print('ok') if len(y) > x else print('please input a valid number')
while True: fun(input(),5)
,
x = 1
n = 3
while x in range(n+1):
x = int(input("X (1 to "+ str(n)+ ") :"))
if x not in range(n+1):
print("please enter a valid input")
x = 1
序列例如:
X (1 to 3) :3
X (1 to 3) :4
please enter a valid input
X (1 to 3) :3
X (1 to 3) :2
X (1 to 3) :1
X (1 to 3) :6
please enter a valid input
X (1 to 3) :
这是您期望的吗?
,以下代码将for
循环数减少到1
,并捕获所有无效输入。
n = 10
x = n + 1
while x not in range(1,n + 1): # The loop keeps going until x is in range.
x = input('Please enter a valid input in the range of (1,'+ str(n) +'): ')
try:
x = int(float(x)) # e.g 5.0 string literal gets converted to 5.
except ValueError:
x = n + 1 # Re-initialize x to keep iterating,until we get a valid input.
if x in range(1,n + 1):
print('Number in range ->',x)
具有无效输入和整数的输出:
Please enter a valid input in the range of (1,10): 一二三
Please enter a valid input in the range of (1,10): 1²
Please enter a valid input in the range of (1,10): asd
Please enter a valid input in the range of (1,10): word
Please enter a valid input in the range of (1,10): a
Please enter a valid input in the range of (1,10): 9
Number in range -> 9
带有浮点数的输出:
Please enter a valid input in the range of (1,10): 11.0
Please enter a valid input in the range of (1,10): 0.0
Please enter a valid input in the range of (1,10): 5.0
Number in range -> 5
,
如果您想使代码更短,下面的代码段可能会有所帮助:
x = ''
n = 10
while not (x.isdigit() and int(x) in range(1,n + 1)):
x = input(f'X (1 to {n}): ')
要对其进行分解,语句
x.isdigit()
将确保x
是否包含 仅整数(字符串中的.
将使其变为False
)。如果那样的话 通过它将字符串安全地解析为整数,然后检查它是否在 范围。not
将确保如果这些情况失败,则循环必须 继续。
旧答案
您可以在try..except
循环内使用while
块,如下所示。如果该值不是整数,则python尝试解析该值时将立即引发错误;如果该值不在范围内,则将在if
语句内引发错误,这两种情况都将由处理try..catch
块。如果没有抛出异常,则break
语句将执行并跳出循环...
n = 10
x = None
while True:
try:
x = int(input(f"X (1 to {n}): "))
if x not in range(n + 1):
raise Exception("ERROR: Not in range")
break # If no errors are thrown,break from the loop
except:
print('Please enter a valid number')
...
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。