Функция не дает желаемого результата

#python-3.x

#python-3.x

Вопрос:

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

  def fib(n):
        Series = [0,1]
        if n>1:
            while Series[-1]<=n:
                c=Series[-2] Series[-1]
                Series.append(c)
                if Series[-1]>n:
                break
            return Series
  

Комментарии:

1. Вы не должны использовать зарезервированное ключевое слово в качестве имени переменной ( Series ). Вместо этого используйте что-то вроде fibs .

Ответ №1:

Ваш код действительно хорош, просто отступ return неправильный. Просто выровняйте его должным образом.

 def fib(n):
    Series = [0,1]
    if n>1:
        while Series[-1]<=n:
            c=Series[-2] Series[-1]
            Series.append(c)
    return Series
  

Комментарии:

1. Спасибо за решение. Но все еще есть некоторая проблема в коде. Если Я хочу увеличить серию до n, то она возвращает серию с последним номером больше n. Не могли бы вы рассказать, почему это происходит именно так?

2. Это потому, что while уже добавляет список перед возвратом значения. последовательность Фибоначчи суммирует последние 2 значения, и поскольку while цикл проверяет условие, оно уже добавлено. один из способов взлома, который вы можете использовать, это return Series[:-1] . Также вам не требуется if цикл в коде. И, как упоминал @ukemi, избегайте зарезервированных ключевых слов.

Ответ №2:

вам нужно что-то вроде этого:

 def fibo(n):
    l = [0,1]
    for i in range(2,n 1): 
        l  = [l[i-1]   l[i-2]]
    return l
  

Комментарии:

1. Нет, я пытаюсь создать серию, в которой заданное значение является суммой последних двух значений. Ваш код также останавливается после первой итерации, как и я, и не дал желаемого результата

Ответ №3:

Если вы хотите получить последовательность Фибоначчи с точностью до n:

 def fib(n):
    series = [0,1]
    if n > 1:
        c = 1
        while c <= n:
            series.append(c)
            c = series[-2]   series[-1]
    return series