科拉兹序列。处理异常处理

Collatz sequence. Dealing with exception handling

我刚开始学习 python 3,在尝试理解异常处理时遇到了一些问题。我正在阅读一本教程书,它给了我一个名为 'The Collatz Sequence'

的小项目

它本质上是一个程序,通过使用一些简单的数学运算将任何整数计算为“1”。

我已经能够成功地让程序运行,直到用户输入除整数以外的任何内容。起初我遇到了 ValueError,它已通过使用 except ValueError:.

得到纠正

现在我似乎得到 NameError: name 'number' is not defined

感谢任何帮助。只是想了解异常处理。

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

try:
    number = int(input('Enter Number: '))
except ValueError:
    print('Please enter an integer')
while int(number) != 1:
    number = collatz(number)

如果遇到异常,则必须在 try 块中包含逻辑。 然后当你遇到异常时你可以处理它。在您的情况下,您可以在 try 中使用 while 块,如下所示。根据例外情况,您可以在下面按照您已经完成的方式处理它们。

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

try:
    number = int(input('Enter Number: '))
    if number != 1:
        number = collatz(number)
except ValueError:
    print('Please enter an integer')

一种可能性是跟踪是否使用布尔值将整数作为输入给出。考虑下面的(改编的)代码:

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

# Keep asking for input until the user inputs an integer
got_integer = False
while not got_integer:
    try:
        number = int(input('Enter Number: '))
        got_integer = True
    except ValueError:
        print('Please enter an integer')

while int(number) != 1:
    number = collatz(number)

如您所见,我定义了一个布尔变量got_integer。最初,我将其值设置为 False。这个变量定义之后是一个while循环,一直执行循环体,直到got_integer的值为True。现在,您只需在成功输入后将 got_integer 的值设置为 True,即 如果 number = int(input('Enter Number: ')) 行的执行成功)。