Как я могу преобразовать вывод моей функции в список? - PullRequest
0 голосов
/ 26 мая 2020

Я пытаюсь использовать ряды Фибоначчи и получить Кубы ряда. Моя функция Фибоначчи дает результат, но я хочу, чтобы этот результат был в форме списка. Ниже приведен мой код

cube = lambda x : x ** 3
def fibonacci(n): 
    a = 0
    b = 1
    count = 0
    if n < 0: 
        print("Incorrect input") 
    elif n == 0: 
        return a 
    elif n == 1: 
        return b 
    else: 
        while count < n: 
            print(a)
            c = a + b 
            a = b 
            b = c 
            count += 1
if __name__ == "__main__":
    n = int(input())
    print(list(map(cube,fibonacci(n))))

Я получаю следующий результат с ошибкой:

6
0
1
1
2
3
5

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-38-58624b7f0dd2> in <module>
      1 if __name__ == "__main__":
      2     n = int(input())
----> 3     print(list(map(cube,fibonacci(n))))

TypeError: 'NoneType' object is not iterable

Я новичок в кодировании. Пожалуйста, помогите!

Ответы [ 2 ]

1 голос
/ 26 мая 2020

Если вы хотите, чтобы функция Фибоначчи возвращала список, измените его следующим образом:

def fibonacci(n): 
    a = 0
    b = 1
    count = 0
    res = []
    if n < 0: 
        print("Incorrect input") 
    elif n == 0: 
        return [a] 
    elif n == 1: 
        return [b] 
    else: 
        while count < n: 
            res.append(a)
            c = a + b 
            a = b 
            b = c 
            count += 1
        return res

Затем вы можете запустить:

n = 5
print(list(map(cube,fibonacci(n))))

Результат:

[0, 1, 1, 8, 27]
0 голосов
/ 26 мая 2020

Хотя вы можете построить list прямо сейчас, как показано здесь , эту задачу можно решить более эффективно, используя генераторы . Идея состоит в том, что с генератором вы выполняете вычисления тогда, когда это действительно необходимо, и вам не нужно (не нужно) хранить потенциально большие промежуточные объекты. * и почему name = lambda ... - это анти-шаблон в Python.

def fibonacci(n): 
    a = 0
    b = 1
    count = 0
    if n < 0: 
        print("Incorrect input")
        return
    elif n == 0: 
        yield a 
    elif n == 1: 
        yield b 
    else: 
        while count < n: 
            yield a
            a, b = b, a + b 
            count += 1


def cube(x):
    return x ** 3


n = 8
print(list(fibonacci(n)))
# [0, 1, 1, 2, 3, 5, 8, 13]
print(list(map(cube, fibonacci(n))))
# [0, 1, 1, 8, 27, 125, 512, 2197]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...