Целая проблема с Python integer list.append () - PullRequest
0 голосов
/ 02 декабря 2018

Мне кажется, у меня возникли некоторые проблемы с пониманием того, почему мои целые числа, которые я добавляю в список, остаются только в цикле, но вне него список пуст.

В этом упражнении я пытаюсь создать программу, которая принимает число и использует рекурсивную функцию для вывода последовательности сиракуз.

import sys

def syracuse(nr):
    ''' syracuse function '''

    nr = int(nr)
    seq = []
    if nr != 1:
        if (nr % 2 != 0):
            n =  3*nr+1
        else:
            n = nr // 2
        seq.append(n)
        print(seq)
        syracuse(n)
    else:
        return seq

def main(argv):
    ''' main function '''
    if len(argv) == 2:
        print(syracuse(argv[1]))

    else:
        print("Error! One number should be included in the query."
        .format(argv[0]), file = sys.stderr)

if __name__ == '__main__':
    main(sys.argv)

При вводе '5' мой вывод:

[16]
[8]
[4]
[2]
[1]
None

Итак, мой вопрос: почему мой список 'seq' выводит 'None', когда переменная 'n'действительно добавляется к нему в моем цикле if nr! = 1.Как вы можете извлечь переменные из циклов?Это то, что я не понимаю, или есть что-то еще?

Надеюсь, мой вопрос последовательный.Заранее спасибо.

Обратите внимание, что хотя я знаю, что Python не работает хорошо для рекурсивных функций, это упражнение, и я должен его реализовать.

1 Ответ

0 голосов
/ 02 декабря 2018

Каждый раз, когда вы вызываете функцию, вы сбрасываете список.Чтобы предотвратить это, используйте список в качестве аргумента:

def syracuse(nr, seq=[]):
nr = int(nr)
if nr != 1:
    if (nr % 2 != 0):
        n =  3*nr+1
    else:
        n = nr // 2
    seq.append(n)
    print(seq)
    syracuse(n, seq)
else:
    return seq
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...