Форум » Обработка символьных строк » Помогите пожалуйста найти ошибку. Задание 24, варианта 17 с сайта kpolyakov » Ответить

Помогите пожалуйста найти ошибку. Задание 24, варианта 17 с сайта kpolyakov

Greenberg: Само задание: (№ 3784) Текстовый файл 24-s1.txt состоит не более чем из 106 символов и содержит только заглавные буквы латинского алфавита (ABC…Z). Текст разбит на строки различной длины. Необходимо найти строку, содержащую наибольшее количество пар соседних букв, которые стоят в таком же порядке и в алфавите (например, AB, BC, CD и т.д.; в цепочке ABC две таких пары). Если таких строк несколько, надо взять ту, которая в файле встретилась позже. Определите, какая буква встречается в этой строке реже всего (но присутствует!). Если таких букв несколько, надо взять ту, которая стоит раньше в алфавите. Запишите в ответе эту букву, а затем – сколько раз она встречается во всем файле. Пример. Исходный файл: ZCQABA ZALMAC CRACUT В этом примере в первой и второй строках по одной подходящей паре (AB и LM), в третьей таких пар нет. Берём вторую строку, т.к. она позже встречается в файле. В этой строке реже других встречаются буквы Z и C (по одному разу), выбираем букву С, т. к. она раньше стоит в алфавите. В ответе для этого примера надо записать C4, так как во всех строках файла буква C встречается 4 раза. Моё решение: [pre2] f = open('24-s1.txt','r') chars_from_text = {} need_char = '' current_min_amount = 60000 alphabet=[] kmax = 0 for е in range(65,91): alphabet.append(chr(е)) b='' for line in f: k = 0 for char in range(0,len(line) - 1): for i in range(0,24): if alphabet[i] == line[char] and alphabet[i + 1] == line[char + 1]: k += 1 if k >= kmax: b = line kmax = max(k , kmax) v = '' for char in b: if char in chars_from_text: chars_from_text[char] += 1 else: chars_from_text[char] = 1 for p in range(0 , 25) : v = alphabet[p] if current_min_amount > chars_from_text[v]: need_char = v current_min_amount = chars_from_text[v] summa = 0 f = open('24-s1.txt','r') for line in f: for q in line: if q == need_char: summa += 1 print('Буква',need_char,'Кол-во букв в файле',summa) [/pre2] Заранее благодарю за оказанную помощь!

Ответов - 2

Фирсов М.: Ваша программа дает правильный ответ. Только где [pre2]if current_min_amount > chars_from_text[ v ]: need_char = v current_min_amount = chars_from_text[ v ] [/pre2] не находит нужный ключ. Либо проверьте на наличие ключа, либо оберните в try except [pre2]if v in chars_from_text: if current_min_amount > chars_from_text[ v ]: need_char = v current_min_amount = chars_from_text[ v ] [/pre2] [pre2]try: if current_min_amount > chars_from_text[ v ]: need_char = v current_min_amount = chars_from_text[ v ] except: continue [/pre2]

Фирсов М.: Не забывайте также, что stop в range() "невключительно". В латинском алфавите 26 букв, в последних двух пробежках по (range(0, 24) и range(0, 25)) буква Z остается без внимания.



полная версия страницы