Python: найти каждую последовательность Фибоначчи в заданном списке чисел - PullRequest
0 голосов
/ 18 марта 2019

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

In: 5,6,9,3,0,1,1,2,3,8,2,9,3,0,1,1,2,3,5,98
Out: 
[0,1,1,2,3]
[0,1,1,2,3,5]

Я пытался использовать циклы «for», чтобы найти первый 0 и обработать программу после него.как он проверяет и следует за списком для последовательности Фибоначчи, пока она не выходит за пределы последовательности, печатает список, а затем ищет следующий 0. Я написал часть кода, которая получает входные данные, но я не знаю, какdo rest

numbers = input("Enter your numbers list and use comma to seperate them: ")
numlist = numbers.split(",")
numlist = [int(x) for x in numlist]
result = []

"result" - это список вывода (или списки).Я надеюсь, что мои объяснения были ясны.кто-нибудь может помочь?

Ответы [ 3 ]

0 голосов
/ 18 марта 2019
FIB = [0,1,1,2,3,5,8,13]

def checkSequence(numArr):
    i = 0
    while i < len(numArr):
        if FIB[i] == int(numArr[i]):
            i += 1
        else:
            return i

numbers = input("Enter your numbers list and use comma to seperate them: ")
numlist = numbers.split(",")
answer = list()
i = 0
while i < len(numlist):
    if int(numlist[i]) == 0:
        ret = checkSequence(numlist[i:])
        answer.append(numlist[i:i+ret])
    i += 1

Как видите, вы можете довольно легко создать метод CheckSquence, чтобы проверить сращивание массива для последовательности и вернуть количество найденных записей.С ответом из checkSequence вы можете создать соединение для своего списка ответов.Это приводит к результатам, которые вы указали в своем вопросе.

РЕДАКТИРОВАТЬ: вам нужно будет определить последовательность Фибоначчи раньше.Вы можете использовать статическую последовательность, как я, или вычислить до определенной точки, а затем сравнить с этим результатом.

0 голосов
/ 18 марта 2019

Идея очень похожа на @Vuplex, но может использовать os.path.commonprefix для удаления лишнего кода для сравнения двух серий

import os
numlist = list(map(int,input.split(',')))
answer = []
fib_series = [0,1,1,2,3,5,8,13]
answer = []
i = 0
while i < len(numlist):
    if not numlist[i]:
        answer.append(os.path.commonprefix([fib_series,numlist[i:]]))
    i += 1
print(answer) #[[0, 1, 1, 2, 3], [0, 1, 1, 2, 3, 5]]
0 голосов
/ 18 марта 2019

Ниже должна работать программа, она проверит серию fibbonaci в списке чисел

numbers = [5,6,9,3,0,1,1,2,3,8,2,9,3,0,1,1,2,3,5,98]

first = numbers[0]
second = numbers[1]

fibbonacci = []
result = []

for number in numbers[2:]:
    if first + second == number:
        if not fibbonacci:
            fibbonacci.extend([first, second, number])
        else:
            fibbonacci.append(number)
    elif fibbonacci:
        result.append(fibbonacci)
        fibbonacci = []
    first = second
    second = number

print(result)
...