-1

私は次のような関数を書きました:

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 つの数字のみを返しています。どうしたの?

4

2 に答える 2

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))番号のリストを取得することができます。

于 2013-11-10T02:35:08.237 に答える
0

関数が完了したことを意味する何かを返すとき

数字だけappendをリストにしてから、1つ後に停止するのではなく、whileループのすべての反復を終了するように数字のリストを返すことができます

于 2013-11-10T02:37:59.747 に答える