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

时间:2012-12-17 20:32:49

标签: python

这是我的代码:

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之间的分数。

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

3 个答案:

答案 0 :(得分: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 :(得分:2)

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

if n in range(0, 101):

几乎是英文的直接翻译。 (这对于Python 3.0或更高版本来说只是一个很好的解决方案,但你明显使用的是Python 3。)

接下来,如果你想让他们继续尝试,直到他们输入有效的东西,只需在循环中进行:

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

再次,几乎是英语的直接翻译。

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

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。所以:

def getTestScore():
    while True:
        try:
            n = int(input("Enter a test score >> "))
        except ValueError:
            pass
        else:
            if n in range(0, 101):
                return n

答案 2 :(得分:0)

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

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.")