Python 通过一些检查获取介于一组数字之间的原始输入

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:

我试图让用户输入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:
        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)