在python中检查数字是否在特定范围内(使用循环)?

在python中检查数字是否在特定范围内(使用循环)?,python,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) 基本上,我正在编写一个程序来计算考试分数,但首先用户必须

这是我的密码:

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

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

如果为True:
while True:
   n = int(input("enter a number between 0 and 100: "))
   if 0 <= n <= 100:
      break
   print('try again')
n=int(输入(“输入一个介于0和100之间的数字:”)
如果首先为0,则必须知道如何检查某个值是否在某个范围内。这很简单:

if n in range(0, 101):
几乎是英语的直接翻译。(这对于Python3.0或更高版本来说只是一个很好的解决方案,但显然您正在使用Python3。)

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

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)
正如fp所指出的,如果他们输入的不是整数,比如“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

可以使用以下帮助器函数:

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.")
def输入_编号(最小值、最大值):
尽管如此:
n=输入(“请输入一个介于{}和{}之间的数字:“.format(min,max))
n=int(n)

if(min)创建一个永远循环的helper函数,调用
input()
在每个循环上。当输入正确的值时,返回它,否则打印一个错误并让循环再次询问。没有人想检查输入是否是一个数字?@fp:这不是规范的一部分。但是添加它当然很容易。如果范围在0到1000000之间,会怎么样?你会将
n
与其中的每个数字进行比较吗range?@NPE:你为什么要这样做呢?只是
n在range(0100001)
(在python2中,你当然希望
xrange
而不是
range
)中。你不懂基本的Python吗?@NPE从python3开始,
range
是一个类似生成器的类型,它定义了一个自定义的
\uuuuuuuuuuuuu()
。假设该方法的实现是合理的并不过分。@MarkusInterwaditzer:鉴于
print
函数和使用
input
(而不是
raw\u input
)返回字符串,OP显然使用的是Python 3。@millimoose:在Python 2.7.3中,
xrange()
确实存在想象中的性能问题。
n in xrange(…)
迭代这些值。他不必说他在使用哪一个;事实上,他在使用
int(input
几乎证明了它是Py3。@abarnert:它暗示了这一点,但没有证明任何东西。我只编写了Python 2.x,但经常使用括号来打印
print()
。我还要写
int(输入(…)
在这里,只是为了让代码具有未来性。恕我直言,一个显然是初学者的人并没有被教去编写通常也适用于Python 3的Python 2代码;他被教去编写Python 3代码。@abarnert:我想我们正在讨论一个无关紧要的小问题。因此,我建议我们还是到此为止。