【问题标题】:Python: Repeat try/except statement until condition met [duplicate]Python:重复try / except语句直到满足条件[重复]
【发布时间】:2018-03-13 19:20:51
【问题描述】:

我正在学习 python,并且被困在一个项目上。该项目的主要部分是对 collat​​z 序列进行编码,这不是问题。下一部分是使用 try 和 except 验证用户输入,以确保只给出一个整数值。 到目前为止,我有以下代码:

def collatz(number):
    if number % 2 == 0:
        return number // 2
    elif number % 2 == 1:
        return (3*number) + 1


print('Please enter a number:')
number = ''
try:
    number = int(input())
except ValueError:
    print('Incorrect type of data entered.\nPlease enter an integer!')
    while number is not int:
        try:
            number = int(input())
        except ValueError:
            print('Incorrect type of data entered.\nPlease enter an integer!')

output = number

while output != 1:
    output = collatz(output)
    print(output)

我的问题是我不确定如何重复 try/except 语句,直到我从用户那里得到一个整数。现在,如果我输入一个字符串而不是一个整数,程序会进入一个循环,随后输入一个整数也无济于事。我阅读了很多关于该主题的主题,但它们并没有阐明上述问题。

真的很想知道我哪里出错了。

【问题讨论】:

  • 如果给定的数字是一个整数,你只检查 3 次就不行了。你可以用isinstance函数检查类型
  • number is not int 永远不会是真的。 type(number) is not int 可以,但最好使用not isinstance(number, int)。更好的是:在没有引发异常时使用while True: and break` out。
  • 你当然是对的。这对我来说是一个非常愚蠢的错误,我错过了 type()。我要检查的是 instance(number, int) - 我不知道这个函数。但是非常感谢您的提示!非常感谢。

标签: python-3.x try-catch except collatz


【解决方案1】:

只需使用isinstance(x, int),其中 x 是输入。

如果 x 是 int,则返回 True。只是另一种解决方案,以防您正在寻找不同的方式!

【讨论】:

  • 感谢您的评论,我会检查 isinstance 函数 - 直到现在我才知道它。感谢您的提示!
【解决方案2】:

你可以使用:

valid=False
while not valid:
    try:
        number=int(input())
        valid=True
    except ValueError:
        print('Incorrect type of data entered.\nPlease enter an integer!')

【讨论】:

  • while Truebreak
猜你喜欢
  • 2013-03-21
  • 1970-01-01
  • 2015-07-28
  • 1970-01-01
  • 2020-06-08
  • 2017-11-30
  • 2013-12-28
  • 1970-01-01
  • 2014-05-03
相关资源
最近更新 更多