Задать вопрос
@n293
Аналитик

Как сделать так, чтобы программа отработала многострочный текст?

Есть задача:

Во входном файле (вы можете читать данные из файла input.txt) записан текст. Словом считается последовательность непробельных подряд идущих символов. Слова разделены одним или большим числом пробелов или символами конца строки. Для каждого слова из этого текста подсчитайте, сколько раз оно встречалось в этом тексте ранее.

Есть вот такое решение:
A = {}
a = open('input.txt', 'r')
for x in a:
    A[x] = A.get(x, 0) + 1
    print(A[x] - 1, end=' ')


А есть тест, который это решение не проходит:

Входные данные:
She sells sea shells on the sea shore;
The shells that she sells are sea shells I'm sure.
So if she sells sea shells on the sea shore,
I'm sure that the shells are sea shore shells.

Вывод программы:
0 0 0 0 0 0 1 0 0 1 0 0 1 0 2 2 0 0 0 0 1 2 3 3 1 1 4 0 1 0 1 2 4 1 5 0 0

Собственно, как сделать так, чтобы многострочный текст тоже отработал в программе?
  • Вопрос задан
  • 6401 просмотр
Подписаться 1 Простой 3 комментария
Решения вопроса 2
@n293 Автор вопроса
Аналитик
Нагуглил другие задачки, в общем. Вытащил из файла текст, запихнул в строку, засплитил и получилось норм.

strWords = ''
counter = {}
f = open('input.txt', 'r')
for line in f:
    strWords = strWords + ' ' + line.replace('\n', '')
f.close()
for word in strWords.split():
    counter[word] = counter.get(word, 0) + 1
    print(counter[word] - 1, end=' ')
Ответ написан
adugin
@adugin Куратор тега Python
from collections import Counter

counter = Counter()
with open(r'z:\test.txt', 'rt') as file:
    for line in file:
        for word in line.strip().split():
            print(counter[word], end=' ')
            counter[word] += 1
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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