Программа не находит изначальный индекс
Код выполняет следующую задачу:
Написать программу, которая читая последовательность чисел из файла, выводит на экран самую длинную возрастающую последовательность, ее длину и позицию (в числах и символах) с которой она началась. Обязательное условие ( Данные должны считываться построчно)
Возникла следующая проблема: программа на месте изначального индекса пишет -1, очевидно ошибка с переменной, но никак не доходит.
Мой код:
import time,os,string,psutil,re
start_time = time.time()
res_list = []
res=''
symbol_len = 1 # Размер буфера чтения
with open('111.txt','r+') as file:
s = file.read(symbol_len) # Читаем первый символ
if not s: # Обработка исключения пустого файла
print("\nФайл text.txt пустой.")
else:
for line in file.readlines():
x = re.findall(r'\d+', line)
if x:
res_list.extend(x)
res_list.append(res)
_max = max(res_list, key=len)
print(f'Самая длинная восх. посл. - {_max}\nсимволов - {len(_max)}\nначальный индекс - {s.find(_max)}')
process = psutil.Process(os.getpid())
print("Программа занимает ", process.memory_info().rss /1048576,"мбайт") # in bytes
print("--- %s Секунд выполнялась программа ---" % (time.time() - start_time))
Значения в файле :
12345RE13453434341234567891
1234567
123456789101112
Ответы (2 шт):
Автор решения: Edward Grachev
→ Ссылка
Если я верно тебя понял то вот код:
import fileinput
import time
import os
import psutil
import re
start_time = time.time()
result = []
# Читаем файл
with fileinput.FileInput('111.txt') as file:
for line in file:
# Проверяем что строка не пустая
if len(line.strip()) > 0:
# Находим в строке самую длинную последовательность
line_int = max(re.findall(r'\d+', line), key=len)
# Если переменная не пустая сравниваем длинну строк
# Добавляем номер строки, строку и длинну строки
if result:
if result[2] < len(line_int):
result = [file.lineno(), line_int, len(line_int)]
# Если пустая создаем
else:
result = [file.lineno(), line_int, len(line_int)]
# Если нет результата
if not result:
print('\nФайл text.txt пустой.')
else:
print(f'Самая длинная восх. посл. - {result[1]}\n'
f'символов - {result[2]}\n'
f'начальный индекс - {result[0]}')
process = psutil.Process(os.getpid())
print("Программа занимает ", process.memory_info().rss /1048576,"мбайт") # in bytes
print("--- %s Секунд выполнялась программа ---" % (time.time() - start_time))
Ну если я правильно понял то что ты написал. То нужно определять номер последовательности и длину.
import fileinput
import time
import os
import psutil
import re
start_time = time.time()
lst = []
s = ''
l = ''
n = ''
# Читаем файл
with fileinput.FileInput('111.txt') as file:
for line in file:
for i in re.findall(r'\d+', line):
lst.append(i)
# Если нет результата
if not lst:
print('\nФайл text.txt пустой.')
else:
# Находим самую длинную последовательность
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}')
process = psutil.Process(os.getpid())
print("Программа занимает ", process.memory_info().rss /1048576,"мбайт") # in bytes
print("--- %s Секунд выполнялась программа ---" % (time.time() - start_time))
Автор решения: Дмитрий
→ Ссылка
Edward,
import time,os,string,psutil,re
start_time = time.time()
symbol_len = 1 # Размер буфера чтения
res_list = []
with open('111.txt','r+') as file:
s = str(file.read())
s = re.sub('[^\d]', '', s)
if not s:
print("файл пуст!")
else:
print("Введена последовоательность :",s)
res = ''
i = 0
while i < len(s):
if res == '' or (int(res[-1]) < int(s[i])):
res += s[i]
else:
res_list.append(res)
res = s[i]
i += 1
res_list.append(res)
_max = max(res_list, key=len)
print(f'Самая длинная восх. посл. - {_max}\nсимволов - {len(_max)}\nначальный индекс - {s.find(_max)}')
process = psutil.Process(os.getpid())
print("Программа занимает ", process.memory_info().rss /1048576,"мбайт") # in bytes
print("--- %s Секунд выполнялась программа ---" % (time.time() - start_time))
```