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

Ave*_*kid 0 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)
Run Code Online (Sandbox Code Playgroud)

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

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

NPE*_*NPE 6

while True:
   n = int(input("enter a number between 0 and 100: "))
   if 0 <= n <= 100:
      break
   print('try again')
Run Code Online (Sandbox Code Playgroud)

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

  • @abarnert:我认为我们正在讨论一个微不足道的,无关紧要的问题.因此,我建议我们将其留在那. (2认同)

aba*_*ert 5

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

if n in range(0, 101):
Run Code Online (Sandbox Code Playgroud)

几乎是英文的直译。(这只是 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)
Run Code Online (Sandbox Code Playgroud)

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

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

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)
Run Code Online (Sandbox Code Playgroud)

正如 fp 指出的那样,如果他们输入的不是整数(例如“A+”),程序仍然会“以错误结束”。处理起来有点棘手。如果您给函数提供的字符串不是整数的有效表示形式,则该int函数将引发 a 。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
Run Code Online (Sandbox Code Playgroud)

  • @millimoose:在 Python 2.7.3 中,“xrange()”确实存在想象中的性能问题。`n in xrange(...)` 迭代这些值。 (3认同)
  • @NPE 从 Python 3 开始,“range”是一个类似生成器的类型,它定义了自定义的“__contains__()”。可以毫不夸张地说,该方法的实现是明智的。 (2认同)