检查python中的数字是否在某个范围内(带循环)?

Check if numbers are in a certain range in python (with a loop)?

本问题已经有最佳答案,请猛点这里访问。

以下是我的代码:

1
2
3
4
5
6
7
8
total = int(input("How many students are there"))
print("Please enter their scores, between 1 - 100")

myList = []
for i in range (total):
    n = int(input("Enter a test score >>"))

    myList.append(n)

基本上,我正在编写一个程序来计算测试分数,但是首先,用户必须输入介于0-100之间的分数。

如果用户输入的测试分数超出该范围,我希望程序告诉用户重写该数字。我不希望程序以错误结束。我该怎么做?


1
2
3
4
5
while True:
   n = int(input("enter a number between 0 and 100:"))
   if 0 <= n <= 100:
      break
   print('try again')

就像问题中的代码一样,这在python 2.x和3.x中都有效。


首先,您必须知道如何检查值是否在范围内。这很容易:

1
if n in range(0, 101):

几乎是直接从英语翻译过来的。(对于Python3.0或更高版本,这只是一个很好的解决方案,但显然您使用的是Python3。)

接下来,如果您想让他们一直尝试直到输入有效的内容,只需在循环中进行:

1
2
3
4
5
6
for i in range(total):
    while True:
        n = int(input("Enter a test score >>"))
        if n in range(0, 101):
            break
    myList.append(n)

同样,几乎是直接从英语翻译过来的。

但如果你把它分解成一个单独的函数,它可能会更清楚:

1
2
3
4
5
6
7
8
9
def getTestScore():
    while True:
        n = int(input("Enter a test score >>"))
        if n in range(0, 101):
            return n

for i in range(total):
    n = getTestScore()
    myList.append(n)

正如F P所指出的,如果程序输入的不是整数,比如"A+",那么它仍然"只会以错误结束"。处理起来有点棘手。如果给int函数指定的字符串不是整数的有效表示,它将引发ValueError。所以:

1
2
3
4
5
6
7
8
9
def getTestScore():
    while True:
        try:
            n = int(input("Enter a test score >>"))
        except ValueError:
            pass
        else:
            if n in range(0, 101):
                return n


您可以使用如下辅助功能:

1
2
3
4
5
6
7
8
def input_number(min, max):
    while True:
        n = input("Please enter a number between {} and {}:".format(min, max))
        n = int(n)
        if (min <= n <= max):
            return n
        else:
            print("Bzzt! Wrong.")