Вложенные циклы Фибоначчи - PullRequest
0 голосов
/ 28 сентября 2018

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

Код:

# asking the user to input number
number = int(input("Enter a number: "))

# creating empty list to be filled
sequence = [0, 1]

x = -2
y = -1


# append items to list
for i in range(number):
    x+=2
    y+=2
# this code will be executed 'length' times
    sequence.append(x+y)

# This should be somewhere in the loop: 
if number in sequence:
    print("The number is in the Fibonacci sequence")
else:
    print("The number is not in the Fibonacci sequence")

Ожидаемый результат:

ФибоначчиПоследовательность = 0, 1, 1, 2, 3, 5, 8, 13, 21, 34,….

Enter a number: 5
>>> The number is in the Fibonacci sequence

Ответы [ 5 ]

0 голосов
/ 29 сентября 2018

Один из подходов заключается в выделении fibonacci в генератор, а затем итерации по этому генератору до >= number, например:

def fib():
    a, b = 0, 1
    while True:
        yield a
        a, b = b, a+b

In []    
number = 5 # int(input("Enter a number: "))

for f in fib():
    if f >= number:
        break

if number == f:
    print("The number is in the Fibonacci sequence")
else:
    print("The number is not in the Fibonacci sequence")

Out[]:
The number is in the Fibonacci sequence

Вы можете использовать itertools.takewhile для замены цикла forНапример:

import itertools as it
from collections import deque

f = deque(it.takewhile(lambda n: n <= number, fib()), maxlen=1).pop()

...
0 голосов
/ 28 сентября 2018

альтернативно вы можете просто рассчитать числа Фибоначчи

def fibo(n):
    p = (1+5**.5)/2
    q = (1-5**.5)/2
    return int(1/5**.5*(p**n-q**n))

def fiba(num):
     count = 0
     while fibo(count) <= num:
             if fibo(count) == num:
                     return "YES!"
             count += 1
     return "NO!"
0 голосов
/ 28 сентября 2018

Может быть, я думаю об этом слишком просто, но в соответствии с вашим вопросом это звучит так, будто вам предоставлена ​​последовательность Фибоначчи.Если это так, вы можете просто использовать in, то есть

x = 5 # this will be user's input
fib = [0,1,1,2,3,5,8,13,21,34]
if x in fib:
    print('Number is in sequence')
else:
    print('Number is not in sequence')

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

0 голосов
/ 28 сентября 2018

Вам нужно будет выполнить некоторую итерацию (или рекурсию), чтобы найти последовательность чисел Фибоначчи.Вот один из способов сделать это с помощью цикла while:

number = int(input("Enter a number: "))

sequence = [0, 1]

i= 0
while True:
    new_item = sequence[i] + sequence[i+1]
    if new_item == number or number in [0,1]:
        print("The number is in the Fibonacci sequence")
        break
    elif new_item > number:
        print("The number is not in the Fibonacci sequence")
        break
    sequence.append(new_item)
    i+=1

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

0 голосов
/ 28 сентября 2018

Последовательность не имеет позиции x или y.Строка, в которую вы добавляете последовательность, должна иметь вид sequence.append(x+y)

...