从python中的函数返回多个数字

时间:2013-11-10 02:32:34

标签: python while-loop

我写了这样一个函数:

def collatz(number):
    '''
        Function takes a positive integer x as input and prints the Collatz sequence starting at x
    '''
    while True:
        if number % 2 == 0: # If number is even
            number = number/2
            return number
        elif number == 1:
            break
        else:
            number =  3*number+1
            return number

该函数应返回如下数字:

collatz(10)
10
5
16
8
4
2
1

此功能使用以下公式:

X={x/2 if x is even , if 3x+1  if x is odd

现在它只返回1个数字。怎么了?

2 个答案:

答案 0 :(得分:1)

函数返回后会立即中断。考虑使用yield

def collatz(number):
    '''
        Function takes a positive integer x as input and prints the Collatz sequence starting at x
    '''
    while True:
        if number % 2 == 0: # If number is even
            number = number/2
            yield number
        elif number == 1:
            break
        else:
            number =  3*number+1
            yield number

这将返回带有数字的生成器。您可以list(collatz(n))获取数字列表。

答案 1 :(得分:0)

当你返回意味着功能完成的东西时

您可以只将append数字添加到列表中,然后返回数字列表,这样就可以完成while循环的所有迭代,而不是在一个循环之后停止