Уведомления

Группа в Telegram: @pythonsu

#1 Фев. 9, 2018 05:55:32

kamikadze
Зарегистрирован: 2018-01-10
Сообщения: 20
Репутация: +  0  -
Профиль   Отправить e-mail  

Символ конца строки, кроме '\n'

Всем привет!

Дан список в файле, состоящий из одной строки, без знака переноса строки (\n): ‘one two one tho three’
Необходимо вывести число предыдущих (предшествующих i-му местоположению каждого слова в строке) повторений для каждого слова. Ответ должен получиться такой: 0 0 1 0 0. Сразу скажу, что при проверке на сервере тесты вводят и по 10, и по 20 строк со словами. Это единичный пример.

Так вот, такой ответ получается, но только в том случае, если в вводном файле добавить пустую строку и соответственно знак ее переноса после строки с вводными словами. Я добавил множество ‘cl’ с перечнем знаков-разделителей слов (в задаче таковыми считаются пробелы, двойные пробелы и знаки переноса строки). Но я не нашел в и-нете, как обозначается конец строки, чтобы дать команду программе, при ее обнаружении, перейти к следующему этапу выполнения. Dubugger показывает, что программа выполняется до последнего символа в строке и тупо прерывается. Может, есть вообще альтернативные способы?


 fInp = open('input.txt', 'r', encoding='utf8')
word = []
tc = 0
lWords = []
cl = {'\n', '  ', ' '}
for line in fInp:
    for char in line:
        if char not in cl:
            word.append(char)
        else:
            t = ''.join(word)
            c = 0
            for i in range(tc):
                if t == lWords[i]:
                    c += 1
            print(c, end=' ')
            lWords.append(t)
            tc += 1
            word = []

Офлайн

#2 Фев. 9, 2018 06:23:51

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Символ конца строки, кроме '\n'

kamikadze
Если у вас “Дан список в файле, состоящий из одной строки, без знака переноса строки (\n)”, то когда вы сделаете
s = fInp.read()
вы получите переменную, которая содержит строку. Никакой символ конца строки вам не нужен.



Офлайн

#3 Фев. 9, 2018 06:27:21

kamikadze
Зарегистрирован: 2018-01-10
Сообщения: 20
Репутация: +  0  -
Профиль   Отправить e-mail  

Символ конца строки, кроме '\n'

Точно! И как я забыл про ‘.readline’?

Ну, в любом случае, спасибо! И, вот, сделал со “сплитом” и конкатенацией списков. Тоже выглядит приемлемо, вроде. Интересно, что в предыдущем варианте, если не учитывать проблему с ‘\n’, код проходит аж до 75 теста. А в текущем варианте - только до 5.

 fInp = open('input.txt', 'r', encoding='utf8')
lWords = []
for line in fInp:
    tl = list(line.strip().split())
    lWords += tl
for i in range(len(lWords)):
    c = 0
    for j in range(i - 1):
        if lWords[i] == lWords[j]:
            c += 1
    print(c, end=' ')

Отредактировано kamikadze (Фев. 9, 2018 06:34:27)

Офлайн

#4 Фев. 9, 2018 06:53:05

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Символ конца строки, кроме '\n'

kamikadze
Интересно, что в предыдущем варианте, если не учитывать проблему с ‘\n’, код проходит аж до 75 теста. А в текущем варианте - только до 5.
Алгоритм у вас мягко говоря не очень, попробуйте вот так

    
s = "one two one tho three four one one"
words = s.split()
repeats = {}
for w in words:
    if w not in repeats:
        repeats[w] = 0
    else:
        repeats[w] += 1
    print(repeats[w])



Офлайн

#5 Фев. 9, 2018 07:11:20

kamikadze
Зарегистрирован: 2018-01-10
Сообщения: 20
Репутация: +  0  -
Профиль   Отправить e-mail  

Символ конца строки, кроме '\n'

Сделал вот так, все прошло!

 inf = open('input.txt', 'r', encoding='utf8')
count = {}
for line in inf:
    words = line.strip().split()
    for word in words:
        count[word] = count.get(word, 0) + 1
        print(count[word] - 1, end=" ")

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version