【问题标题】:Check if numbers are in a certain range in python (with a loop)? [duplicate]检查python中的数字是否在一定范围内(带循环)? [复制]
【发布时间】:2012-12-17 20:32:48
【问题描述】:

这是我的代码:

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

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

【问题讨论】:

  • 创建一个永远循环的辅助函数,在每个循环中调用input()。当输入正确的值时,返回它,否则打​​印错误并让循环再次询问。
  • 没有人想检查输入的是数字吗?
  • @fp:这不是规范的一部分。但当然,它很容易添加。

标签: python


【解决方案1】:
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。

【讨论】:

  • 他不必说他正在使用哪个;他在做int(input 的事实几乎证明了它是 Py3。
  • @abarnert:它提示,但没有证明什么。我只编写 Python 2.x,但经常在 print() 中使用括号。我也会在这里写int(input(...)),只是为了让代码面向未来。
  • 恕我直言,显然是初学者的人没有被教导编写通常也适用于 Python 3 的 Python 2 代码;他被教导编写 Python 3 代码。
  • @abarnert:我认为我们正在讨论一个微不足道的、无关紧要的问题。因此,我建议我们就此搁置。
【解决方案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

【讨论】:

  • 如果范围是从 0 到 1,000,000 怎么办?您会将n 与该范围内的每个数字进行比较吗?
  • @NPE:你为什么要这么做?只需n in range(0, 1000001)。 (当然,在 Python 2 中,您需要 xrange 而不是 range。)您不懂基本的 Python 吗?
  • @NPE 从 Python 3 开始,range 是一个类似于生成器的类型,它定义了一个自定义的 __contains__()。假设该方法被合理实施并不是一件容易的事。
  • @MarkusUnterwaditzer:鉴于print 函数和使用input(而不是raw_input)返回一个字符串,OP 显然在使用Python 3。
  • @millimoose:在 Python 2.7.3 中,xrange() 确实存在想象中的性能问题。 n in xrange(...) 遍历值。
【解决方案3】:

您可以使用如下辅助函数:

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

【讨论】:

    猜你喜欢
    • 2021-04-01
    • 2017-05-16
    • 2014-05-05
    • 1970-01-01
    • 1970-01-01
    • 2015-11-28
    • 2014-12-05
    • 1970-01-01
    • 2018-05-12
    相关资源
    最近更新 更多