使用“return”语句时,无法使Python While循环重复自身

lb3vh1jj  于 2023-03-20  发布在  Python
关注(0)|答案(2)|浏览(167)

我最近开始学习Python,书中给我的任务是创建一个函数,该函数将以一个输入数字开始编写Collatz序列,但是,尽管有while循环,如果我使用return语句,它将只运行一次。为什么会这样呢?如果i将其更改为n =,程序将正确运行,但return的意义何在?
下面是当前代码:

def collatz(n):
    while n!=1:
        print(n) 
        if n%2==0:            
            return n//2   
        else: 
            return n*3+1

print('Insert a number.')
while True:
    try:
        print(collatz(int(input())))
    except ValueError:
        print('Please insert an integer number.')

如果我键入33,它将只打印:

>>>>33
>>>>100

然后停止,因此只返回新值一次。

bejyjqdl

bejyjqdl1#

你要找的可能是这样的:

def collatz(n):
    while n != 1:
        print(n)
        if n % 2 == 0:
            n = n // 2
        else:
            n = n * 3 + 1
    return n

返回的“点”是提供函数的输出,例如,x = collatz(1)将使print(x)1
一个有趣的事实是,你可以用yield keyword创建一个不止一次返回的函数,我不认为这是你解决这个问题所要寻找的,但事实上,当使用yield而不是return时,你可以在函数调用上使用for循环,在函数终止之前进行多次返回。

piok6c0g

piok6c0g2#

看起来你遇到了here的问题,我认为这只是书中的一个错误,看起来你把while循环放进了函数中,但是一旦你返回,即使数字不等于1也不会重复,因为退出了while循环和函数。在这个问题上,得票最多的答案有一个更好的方法,就是将while循环移到函数之外,这样,如果数字不等于1,就可以重新运行函数。
如果你不想让while循环离开函数,你可以这样做:

def collatz(number):

    while number != 1:
        if number % 2 == 0:
            print(number // 2)
            number = number // 2

        elif number % 2 == 1:
            result = 3 * number + 1
            print(result)
            number = result

    print("This should be 1: ", number)
    return number

相关问题