Построчно считать последовательность цифр из файла и вывести на экран самую длинную возрост. послледовательность
Задача
Программа считывает последовательность цифр из файла(построчно) и выводит на экран самую длинную возрастающую последовательность, ее длину и позицию
Проблема
Код почему-то просто выводит последний элемент
import fileinput, time,os,psutil,re
start_time = time.time()
lst = []
s,l,n = ' '*3
# СЧитаем файл
with fileinput.FileInput('111.txt') as file:
for line in file:
for i in re.findall(r'\d+', line):
lst.append(i)
# Находим самую длинную последовательность
for number, i in enumerate(lst):
buff = 0
for j in i:
if int(j) > buff:
buff = int(j)
s = i
l = len(i)
n = number + 1
else:
break
print(f'Введенные значения- {lst}\n'
f'Самая длинная восх. посл. - {s}\n'
f'Длинна последовательности - {l}\n'
f'Номер последовательности - {n}')
Значения в файле:
1 2 3 44 45 4 5 6 6 7
1 2 3 4 5e 9 1 й ц у к 22222222222
й ц у к 4 5 6 913 4 5 7 67898 456 4 12 6 7 4 2 123456789 4 5
У меня выводит
Введенные значения- ['1', '2', '3', '44', '45', '4', '5', '6', '6', '7', '1', '2', '3', '4', '5', '9', '1', '22222222222', '4', '5', '6', '913', '4', '5', '7', '67898', '456', '4', '12', '6', '7', '4', '2', '123456789', '4', '5']
Самая длинная восх. посл. - 5
Длинна последовательности - 1
Номер последовательности - 36
Ответы (1 шт):
Автор решения: Сергей
→ Ссылка
Починил - " почему-то " объясняется тем, что у вас вообще нигде не запоминается эта длинная последовательность, да и сравнения не видно. Запоминается же что-то странное. Вы проверяете исключительно возрастание внутри последовательности.
Поэтому запоминаем ниже все последовательности возрастающие, а в конце самую длинную берем. Смотрите комментарии.
import fileinput, time,os,re
start_time = time.time()
lst = []
# СЧитаем файл
with fileinput.FileInput('111.txt') as file:
for line in file:
for i in re.findall(r'\d+', line):
lst.append(i)
# Список возрастающих последовательностей
list1 = []
# Находим самую длинную последовательность
for number, i in enumerate(lst):
temp_s=''
fl = True
buff = 0
# Проверяем только если больше одного символа
if len(i) > 1:
for j in i:
if int(j) > buff:
# Накапливаем последовательность
temp_s += j
buff = int(j)
else:
# Не возрастающая последовательность
fl= False
break
# Запомнили последовательность и её номер
if fl:
list1.append((temp_s, number + 1))
# Находим самую длинную последовательность
longest=max(list1, key=lambda i: len(i[0]))
print(f'Введенные значения- {lst}\n'
f'Самая длинная восх. посл. - {longest[0]}\n'
f'Длина последовательности - {len(longest[0])}\n'
f'Номер последовательности - {longest[1]}')