Stack Overflow на русском Asked on February 24, 2021
Дана следующая задача: "Текстовый файл состоит не более чем из 10^6 символов и содержит только заглавные латинские буквы и десятичные цифры. Определите самое длинное слово. Словом считается любая произвольная последовательность букв." Пробелов в файле нет, только цифры и буквы.
Я составила следующий код:
s = open('24.txt').read()
data = []
maxdata = []
for char in s:
if char in '0123456789':
data.clear()
else:
data.append(char)
if len(data) > len(maxdata):
maxdata.clear()
maxdata = data
print(*maxdata)
Но он ничего не печатает. 🙁
Можете написать, в чём проблема?
Вот здесь вы присваиваете переменной maxdata
ссылку, которая содержится в переменной data
. В результате чего у вас обе эти переменные начинают указывать на один и тот же список:
maxdata = data
Поэтому, когда вы дальше по ходу действия программы очищаете список, на который указывает переменная data
:
data.clear()
Вы таким образом очищаете тот же самый список, на который указывает и maxdata
и у вас этот список становится пустым.
Чтобы такого не происходило, вам нужно присвоить maxdata
ссылку на копию списка, на который указывает переменная data
. Сделать это можно одним из следующих способов:
maxdata = data.copy()
maxdata = data[:]
maxdata = list(data)
Но ещё лучше вместо data.clear()
использовать data = []
, чтобы каждую итерацию цикла переменная data
у вас указывала на новый список (обычно именно так и делают в питоне).
Correct answer by CrazyElf on February 24, 2021
Get help from others!
Recent Answers
Recent Questions
© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP