0

这是我的代码:

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

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

4

3 回答 3

8
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。

于 2012-12-17T20:34:47.740 回答
3

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

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)

正如 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
于 2012-12-17T20:35:47.757 回答
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.")
于 2012-12-17T20:37:46.323 回答