Python 通过一些检查获取介于一组数字之间的原始输入
我试图让用户输入2个数字,这些数字被分成2个整数的列表,但不幸的是,我似乎无法让它们变成整数,但我也不确定我的检查,以及它是否会正确终止并返回我所需要的Python 通过一些检查获取介于一组数字之间的原始输入,python,function,if-statement,Python,Function,If Statement,我试图让用户输入2个数字,这些数字被分成2个整数的列表,但不幸的是,我似乎无法让它们变成整数,但我也不确定我的检查,以及它是否会正确终止并返回我所需要的 def getlohiint(): lohilist = [] lohi = raw_input("Enter min and max number of points to use(e.g., 2 1000): ") lohilist = lohi.split() for x in lohilist:
def getlohiint():
lohilist = []
lohi = raw_input("Enter min and max number of points to use(e.g., 2 1000): ")
lohilist = lohi.split()
for x in lohilist:
int(x)
if lohilist[0]<=2 and lohilist[1]<=1000 and lohilist[0]<lohilist[1]:
break
else:
prompt = "%d is not in the range of 2 to 1000; "
prompt1 = "must be at least 2"
prompt2 = "must be no higher than 1000"
if lohilist[0]<2:
print prompt + prompt1
elif lohilist[1]>1000:
print prompt + prompt2
else:
print prompt + prompt1 + prompt2
lohi
high = lohilist[1]
low = lohilist[0]
return(low, high)
def getlohiint():
lohilist=[]
lohi=原始输入(“输入要使用的最小和最大点数(例如,2 1000):”)
lohilist=lohi.split()
对于lohilist中的x:
int(x)
如果lohilist[0]您从不将int(x)
的结果分配给任何对象。通过列表理解最容易实现:
lohilist = [int(x) for x in lohi.split()]
请注意,您可以一次分配给多个目标:
low, high = [int(x) for x in lohi.split()]
将lohi
中的所有内容转换为整数,并一次性分配给两个变量
您可能也希望在此处测试异常:
def getlohiint():
while True:
lohi = raw_input("Enter min and max number of points to use(e.g., 2 1000): ")
try:
low, high = [int(x) for x in lohi.split()]
except ValueError:
# either not integers or not exactly 2 numbers entered.
print "You must enter exactly 2 numbers here"
continue
if low <= 2 and high <= 1000 and low < high:
# valid input, return
return low, high
if low > 2:
print 'The minimum must be 2 or lower'
if high > 1000:
print 'The maximum must be 1000 or lower'
if low >= high:
print 'The maximum must be greater than the minimum'
def getlohiint():
尽管如此:
lohi=原始输入(“输入要使用的最小和最大点数(例如,2 1000):”)
尝试:
low,high=[lohi.split()中x的int(x)]
除值错误外:
#输入的不是整数或不是2个数字。
打印“您必须在此处准确输入2个数字”
持续
如果低于1000:
打印“最大值必须为1000或更低”
如果低>=高:
打印“最大值必须大于最小值”
int(x)
返回一个整数值,它不修改x的值
您可能需要以下内容:
def getlohiint():
lohilist = []
lohi = raw_input("Enter min and max number of points to use(e.g., 2 1000): ")
lohilist = lohi.split()
lohilist = [int(x) for x in lohilist]
我将把它抽象出来:创建一个函数,从输入中解析整数列表,然后创建另一个函数,获取整数列表并测试它们是否符合您的条件:
import sys
# version compatibility shim
if sys.hexversion < 0x3000000:
# Python 2.x
inp = raw_input
else:
# Python 3.x
inp = input
def get_ints(prompt, delimiter=None):
while True:
try:
return [int(i) for i in inp(prompt).split(delimiter)]
except ValueError:
pass
def get_lo_hi_ints(prompt, min_=None, max_=None):
while True:
try:
lo, hi = get_ints(prompt)
if lo >= hi:
print("First value must be < second value")
elif (min_ is not None and lo < min_):
print("Low value must be >= {}".format(min_))
elif (max_ is not None and hi > max_):
print("High value must be <= {}".format(max_))
else:
return lo, hi
except ValueError:
print("Please enter 2 values!")
我总是忘了这个方法…(让我觉得很愚蠢)谢谢你,但我如何正确地进行检查呢。我不认为break是合适的方法,我最初有过类似的方法,比如减去try和except,但我在获取和整数方面仍然有问题。为什么会有try语句?非常感谢您int()
函数会在字符串包含任何不能协调为整数的内容时引发ValueError
,如果右侧的列表理解导致少于或多于2个值,则多重赋值将引发相同的异常。try
语句处理这两种情况。但是在我添加lohilist=[int(x)for x in lohi.split()]之后,我不确定如何正确地执行检查。特别是第一个if循环您是指第一个if
语句的块吗?如果块不是循环,则只执行一次。如果您刚刚访问tutorialspoint.com,看到break
出现在If
语句之后,这是因为在这些示例中,它位于for
或while
循环中。如果您不想对If语句执行任何操作,请使用pass
,它本质上是一个nop
,或者不执行任何操作语句(它不执行任何操作)。您也可以简单地将整个if语句放在括号中,并在其前面加一个not
,并将其作为错误案例;因此,将if…else
更改为一个if
语句。代替版本测试,只需尝试并引用raw_input
;如果出现名称错误
,则使用输入
。
min_points, max_points = get_lo_hi_ints("Enter min and max number of points to use(e.g., 2 1000): ", 2, 1000)