Уведомления

Группа в Telegram: @pythonsu

#1 Ноя. 1, 2016 21:46:02

crazyma66ot
Зарегистрирован: 2016-10-12
Сообщения: 15
Репутация: +  0  -
Профиль   Отправить e-mail  

решение не сходится с ответом

дано:
Во входном файле (вы можете читать данные из sys.stdin, подключив библиотеку sys) записан текст. Словом считается последовательность непробельных символов идущих подряд, слова разделены одним или большим числом пробелов или символами конца строки. Определите, сколько различных слов содержится в этом тексте.

ввод:
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.

вывод 19

мое решение:

 a = input()
print(int(a.count(' ')) + 1 )

выдает 8 !

не могу сообразить в чем дело

Офлайн

#2 Ноя. 2, 2016 02:39:04

scidam
Зарегистрирован: 2016-06-15
Сообщения: 288
Репутация: +  35  -
Профиль   Отправить e-mail  

решение не сходится с ответом

Сейчас в просто считате количество двойных/одинарных пробелов во введенной строке. А если вам подадут сразу много строк (например, через stdin). Тут можно использовать регулярные выражения, и ваш код должен выглядеть приблизительно так (файл wc.py):

 import sys
import re
# You need to check regexp for your needs...
wc = lambda s:  set(re.findall(r"""[\w'";,\.)]+""", s))
print('Words, total: ', set.union(*(wc(line) for line in sys.stdin.readlines())).__len__())

Дальше, пусть ваши тестовые строки записаны в файл test.txt, а код находится в файле wc.py (word counter). Тогда получим следующее (выполненяя в linux)):
cat test.txt | python3 wc.py
Words, total: 19

Отредактировано scidam (Ноя. 2, 2016 02:40:28)

Офлайн

#3 Ноя. 2, 2016 04:28:07

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9890
Репутация: +  854  -
Профиль   Отправить e-mail  

решение не сходится с ответом

  
>>> s = """
... 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.
... """
>>> 
>>> n = len(set(s.split()))
>>> n
19
>>>



Офлайн

#4 Ноя. 4, 2016 14:07:50

izekia
От:
Зарегистрирован: 2008-07-19
Сообщения: 317
Репутация: +  12  -
Профиль   Отправить e-mail  

решение не сходится с ответом

 len(set(re.findall('[^ \n]+', sys.stdin.read())))



Офлайн

#5 Ноя. 5, 2016 02:37:23

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9890
Репутация: +  854  -
Профиль   Отправить e-mail  

решение не сходится с ответом

izekia
  
re.findall('[^ \n]+'
Обычный str.split() по ним и так разобьёт.



Офлайн

#6 Ноя. 5, 2016 05:46:00

izekia
От:
Зарегистрирован: 2008-07-19
Сообщения: 317
Репутация: +  12  -
Профиль   Отправить e-mail  

решение не сходится с ответом


py.user.next
Обычный str.split() по ним и так разобьёт.
ага, точно, просто у меня сначала был вариант без знаков препинания, потом перечитал условие и поменял регулярку



Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version