#python #sequence #fibonacci
#питон #последовательность #фибоначчи
Вопрос:
Я пытаюсь создать код, который просит пользователя ввести положительное число, а затем сообщает ему/ей, принадлежит ли это число последовательности Фибоначчи. Проблема в том, что, когда я запускаю код, он никогда не прекращается (или в конечном итоге я получу ошибку). Вот мой код до сих пор:
print("nEnter any positive number, to see if it") user = input("belongs to the Fibonacci sequence: ") def fibo(user): if user in [0,1]: return user else: return fibo(user-1) fibo(user-2) while user.isdigit() == False: user = input("Input error. Please enter a positive number: ") else: user = int(user) if user == fibo(user): print("nNumber",user,"belongs to the Fibonacci sequence.n") else: print("nNumber",user,"doesn't belong to the Fibonacci sequence.n")
Комментарии:
1. Вместо того, чтобы пытаться вычислить последовательность рекурсивно, просто вычисляйте ее вперед, пока не достигнете числа, которое больше или равно «пользователь».
2. Я понимаю, о чем вы говорите, но я не совсем уверен, как это сделать… Я имею в виду, конечно, я собираюсь стереть функцию def fibo(пользователь), но тогда куда я собираюсь поместить [0,1] и fibo(пользователь-1) fibo(пользователь-2)…? Внутри оператора if?
Ответ №1:
def fibo(input): i = int(input) # set z to 1 if you want # False to be returned for 0 x = 0; y = 1; z = 0 while z lt; i: z = x y; x = y; y = z return z == i print(fibo(input("fibonacci?: ")))
Ответ №2:
def fibo(input): if int(input) == 0: return [0] x = 0; y = 1; z = 0; erg = [] while True: z = x z; x = y; y = z if y gt; int(input): break else: erg.append(y) if int(input) in erg: return True else: return False print(fibo(input("fibonacci?: ")))
Комментарии:
1. Здравствуйте и спасибо за ответ! Я новичок в python, поэтому, пожалуйста, не могли бы вы объяснить немного больше о x, y, z, erg= [],. append() и почему мы помещаем fibo() внутри printf…? Я немного сбит с толку, если честно :D!
2. Если код не выполняется в интерактивном режиме, возвращаемое значение функции не будет видно, если оно явно
print()
не изменено. Я не вижу смысла в этом списке для вашей конкретной цели. Также, похоже, есть какая-то опечатка. Смотрите мой ответ, адаптированный из вышесказанного.3. @TomYan прав, список не является необходимым. у меня это есть, потому что я использовал свой сценарий, который я сделал, чтобы дать мне все числа Фибоначчи вплоть до введенного числа в качестве основы для этого. я не нашел опечатки, тхо. все равно спасибо, что указали на это.
4. Ах, похоже, это был трюк, чтобы включить f0 и f1 в список
5. Спасибо за ответы, ребята, я вам очень признателен! И теперь я понял код!