在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:我想我们正在讨论一个无关紧要的小问题。因此,我建议我们还是到此为止。