Python Программа работает с цифрами,а нужно с числаами
Задание
Написать программу, которая читая последовательность чисел из файла, выводит на экран самую длинную возрастающую последовательность, ее длину и позицию (в числах и символах) с которой она началась. Просьба: Помогите отредактировать код так,чтобы программа
import time,os,string,psutil
start_time = time.time()
symbol_len = 1 # Размер буфера чтения
with open('111.txt','r+') as file:
s = str(file.read())
if os.stat("111.txt").st_size == 0 or not s.isdigit():
print("Файл пуст или содержит не только числа !!!")
else:
print("Введена последовоательность :",s)
res = ''
res_list = []
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))
Ответы (1 шт):
Автор решения: Zhihar
→ Ссылка
зачем сохранять последовательности, когда проверку можно выполнять сразу же
res = ''
i = 0
max_seq_size = -1
max_seq_pos = -1
while i < len(s):
if res == '' or (int(res[-1]) < int(s[i])):
res += s[i]
else:
if len(res) > max_seq_size:
max_seq_size = len(res)
max_seq_pos = i - max_seq_size
res = s[i]
i += 1
if len(res) > max_seq_size:
max_seq_size = len(res)
max_seq_pos = i - max_seq_size
Да и while лучше на for заменить, более читаемо будет:
res = ''
max_seq_size = -1
max_seq_pos = -1
for i in range(len(s)):
if res == '' or (int(res[-1]) < int(s[i])):
res += s[i]
else:
if len(res) > max_seq_size:
max_seq_size = len(res)
max_seq_pos = i - max_seq_size
res = s[i]
if len(res) > max_seq_size:
max_seq_size = len(res)
max_seq_pos = len(s) - max_seq_size
да и накапливать последовательность смысла нет:
seq_size = 0
digit = 0
max_seq_size = -1
max_seq_pos = -1
for i in range(len(s)):
if seq_size == 0 or (digit < int(s[i])):
seq_size += 1
else:
if seq_size > max_seq_size:
max_seq_size = seq_size
max_seq_pos = i - max_seq_size
seq_size = 1
digit = int(s[i])
if seq_size > max_seq_size:
max_seq_size = seq_size
max_seq_pos = len(s) - max_seq_size