#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