#python #list #search #find #fibonacci
#python #Список #Поиск #Найти #фибоначчи
Вопрос:
программа, которая принимает от пользователя список чисел, разделенных знаком «,», извлекает и печатает каждую последовательность фибоначчи из списка. вот так:
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.
я написал часть кода, которая получает входные данные, но я не знаю, как сделать остальное
numbers = input("Enter your numbers list and use comma to seperate them: ")
numlist = numbers.split(",")
numlist = [int(x) for x in numlist]
result = []
«результат» — это выходной список (или списки).
я надеюсь, что мои объяснения были понятны. кто-нибудь может помочь?
Комментарии:
1. Ваш ожидаемый результат не очень понятен для данного ввода. Когда вы говорите
every fibonacci sequence
, что именно вы имеете в виду под этим? Например, согласно вашему тексту[0]
также будет действительный ряд Фибоначчи, но он не включен в ваш ожидаемый результат2. Почему программа не должна выводить
[0]
или[0,1]
,[0,1,1]
или[0,1,1,2]
?
Ответ №1:
Приведенная ниже программа должна работать, она проверит наличие ряда фибоначчи в списке чисел
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)
Ответ №2:
Идея очень похожа на @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]]
Ответ №3:
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, вы затем можете создать соединение для вашего списка ответов. Это приводит к результатам, которые вы указали в своем вопросе.
РЕДАКТИРОВАТЬ: Вам нужно будет определить последовательность Фибоначчи раньше. Вы можете либо использовать статическую последовательность, как я, либо вычислять до определенной точки, а затем сравнивать с этим результатом.
Комментарии:
1. @mad_ где это не дает прямого ответа на вопрос?