Задать вопрос
@Iqv

Что не так в коде (Python3)?

Текстовый файл состоит из слов, записанных строчными буквами латинского алфавита, разделенных пробелами. Иных символов, кроме букв, пробелов и концов строк в файле нет.

Посчитайте, какое слово в этом файле встречается чаще всего. Выведите это слово. Если таких слов несколько, выведите то, которое меньше в лексикографическом порядке.
Входные данные:

Входные данные к этой задаче записаны в файле input.txt. Размер файла не превосходит 1 МБ.

Выходные данные:

Программа должна вывести в файл output.txt искомое слово.

max = 0
cc = ''
fin = open('input.txt', 'r')
fout = open('output.txt', 'w')
a = fin.read().replace('\n',' ').split()
set_a = list(set(a))
for i in set_a:
    if a.count(i) == max:
        if cc > i:
            cc = i
    elif a.count(i) > max:
        max = a.count(i)
        cc = i
fout.write(cc)


Почему Partial Solution. Your score is = 2, 2/10 tests passed?
  • Вопрос задан
  • 712 просмотров
Подписаться 2 Оценить 7 комментариев
Решения вопроса 1
Sly_tom_cat
@Sly_tom_cat
.
Можно как dimonchik2013 предложил, а можно действительно сплитом и просто словарь использовать, set нужен только для отработки случая когда нужно с лексикографическим порядком разруливать.

#!/usr/bin/env python3

counts = dict()
with open('input.txt', 'rt') as fin:
    for line in fin:
        for word in line.split():
            counts[word] = counts.get(word, 0) + 1
    max = 0
    max_word = set()
    for word, cnt in counts.items():
        if cnt > max:
            max_word = {word}
            max = cnt
        if cnt == max:
            max_word.add(word)
    with open('output.txt', 'wt') as fout:
        fout.write(min(max_word))


Кстати у вас в коде нет ничего именно по поводу лексикографического порядка при выборе слова из списка (тех у которых максимальная встречаемость равна и максимальна).

И еще: Файл одним чехом читать - не совсем правильно. В задаче он может и 1МБ, а в жизни может оказаться 1Тб - и вы сразу создадите краш с переполнением - не факт что этот краш нельзя использовать для взлома системы, например.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
dimonchik2013
@dimonchik2013
non progredi est regredi
itertools groupby()
collections counter()
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы