Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.89/244: Рейтинг темы: голосов - 244, средняя оценка - 4.89
171 / 92 / 71
Регистрация: 10.05.2014
Сообщений: 432

Количество слов в тексте

14.02.2016, 19:29. Показов 49379. Ответов 22
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Первое, что хочется сказать, так это то, что мне необходимо узнать, в чем ошибся я при решении этой задачи, другие решения не особо интересуют.

Задание:
Дан текст: в первой строке записано число строк, далее идут сами строки. Определите, сколько различных слов содержится в этом тексте.
"Словом считается последовательность не пробельных символов идущих подряд, слова разделены одним или большим числом пробелов или символами конца строки."

Входные данные
4
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
Код:
Python
1
2
3
a = int(input())
c = ' '.join(''.join(x for x in input() if x.isalpha() or x.isspace()) for i in range(a))
print(len(set(c.split())),sep='',end='')
Объяснения по коду:
Сперва считывается количество строк. Затем производятся циклы "x for x in input() if x.alpha() or x.isspace()) for i in range(a)",
с помощью которых, по буквенно, с учетом пробелов, считываются все строки с текстом.
Сделал это дабы отбросить все знаки препинания из текста. Далее получившуюся строку преобразовываю в множество, чтобы убрать повторяющиеся слова и вывожу длину множества.
P.S. что делают join и split, думаю, понятно=)

Вопрос:
В чем я ошибся, ведь у меня на выходе получается 16, а не 19?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
14.02.2016, 19:29
Ответы с готовыми решениями:

Подсчитать в тексте количество слов в тексте
Подсчитать в тексте количество слов. (Словом считать набор символов между пробелами, знаками препинания. Я нашел код, но его нужно...

Количество слов в тексте
Здраствуйте, мне нужно прочитать текст(допустим в файле пару страниц из книги) и посчитать количество встречаемости слова Я нашел, что...

Количество слов в тексте
Прошу помочь Дано английский текст, каждое слово которого отделено пробелом. Подсчитать количество слов, начинающихся с буквы,...

22
51 / 51 / 18
Регистрация: 03.12.2015
Сообщений: 167
14.02.2016, 19:36
Лень разбираться, но предположу, что это из-за строчных и заглавных букв. x.lower()
0
Эксперт по компьютерным сетям
 Аватар для Jabbson
5906 / 3358 / 1036
Регистрация: 03.11.2009
Сообщений: 10,008
14.02.2016, 19:40
Python
1
2
3
4
5
6
a = '''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.'''
 
print(len({x for x in re.findall(r'\w+', a)}))
1
171 / 92 / 71
Регистрация: 10.05.2014
Сообщений: 432
14.02.2016, 19:41  [ТС]
arctblake, стало 13, вместо 19=(
0
Эксперт по компьютерным сетям
 Аватар для Jabbson
5906 / 3358 / 1036
Регистрация: 03.11.2009
Сообщений: 10,008
14.02.2016, 19:44
UPD

Python
1
print(len({x for x in re.findall(r'[A-z\']+', a)}))
слова
Code
1
2
{'She', "I'm", 'sure', 'she', 'on', 'if', 'The', 'are', 'shells', 
 'sells', 'the', 'sea', 'shore', 'So', 'that'}
других слов в скороговорке не вижу

если без учета регистра - 13.
0
51 / 51 / 18
Регистрация: 03.12.2015
Сообщений: 167
14.02.2016, 19:50
Ну все правильно. В тексте 13 различных слов. Вы сами так в условии написали. Если считать I'm за одно слово. Где там 19 то?

Добавлено через 2 минуты
She и she - это ведь одно слово. В условии сказано - 'различных'. Если подразумевается без учета регистра, то 13. Если с - 15
0
171 / 92 / 71
Регистрация: 10.05.2014
Сообщений: 432
14.02.2016, 20:27  [ТС]
arctblake, дружно говорим спасибо pythontutor.ru! Сейчас даже сам на листочке выписал все слова и поочередно закрашивал исключенные. В итоге реально получилось 13 с учетом нижнего регистра и 15 без него

Добавлено через 10 минут
Оказывается, по их мнению решение задачи выглядит следующим образом:
Python
1
2
3
4
words = set()
for _ in range(int(input())):
    words.update(input().split())
print(len(words))
Что означает, мол им нужны были слова с точками, запятыми и прочей лабудой... facepalm
Ребят, за то, что откликнулись большое спасибо=)

Добавлено через 9 минут
Если по моему коду рассматривать решение, то надо было просто .isalpha() и .isspsce() убрать
Python
1
2
3
a = int(input())
c = ' '.join(''.join(x for x in input()) for i in range(a))
print(len(set(c.split())),sep='',end='')
0
Эксперт по компьютерным сетям
 Аватар для Jabbson
5906 / 3358 / 1036
Регистрация: 03.11.2009
Сообщений: 10,008
14.02.2016, 20:31
Цитата Сообщение от Zodt Посмотреть сообщение
Оказывается, по их мнению решение задачи выглядит следующим образом:

Не по теме:

ну и думайте, хотите вы дальше там учить что-то или нет, коли у них точки входят в слова))

0
171 / 92 / 71
Регистрация: 10.05.2014
Сообщений: 432
14.02.2016, 20:44  [ТС]
Цитата Сообщение от Jabbson Посмотреть сообщение
ну и думайте, хотите вы дальше там учить что-то или нет, коли у них точки входят в слова))
да вот начинаю задумываться над этим=)
0
30 / 30 / 22
Регистрация: 13.02.2016
Сообщений: 131
14.02.2016, 22:17
Вроде еще так можно
Python
1
2
3
4
5
text='''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.'''
len(set(text.split())&set(text.split()))
0
Эксперт по компьютерным сетям
 Аватар для Jabbson
5906 / 3358 / 1036
Регистрация: 03.11.2009
Сообщений: 10,008
14.02.2016, 22:20
а два сета там зачем?
Python
1
len(set(text.split()))
0
30 / 30 / 22
Регистрация: 13.02.2016
Сообщений: 131
14.02.2016, 22:27
Да, точно, забыл что сет одинаковые слова все равно как одно представляет. Но там все неправильно потому что она принимает слова с точкой или точкой с запятой за отдельное слово
0
1 / 1 / 0
Регистрация: 18.09.2016
Сообщений: 18
21.09.2016, 00:17
да, что-то много спорных решений на этом сайте, а кое-где вобще неверных эталонных решений.
вот например задача элементарнейшая про парты:

В некоторой школе решили набрать три новых математических класса и оборудовать кабинеты для них новыми партами. За каждой партой может сидеть два учащихся. Известно количество учащихся в каждом из трех классов. Выведите наименьшее число парт, которое нужно приобрести для них. Программа получает на вход три натуральных числа: количество учащихся в каждом из трех классов.

эталон вот:

Python
1
2
3
4
a = int(input())
b = int(input())
c = int(input())
print(a // 2 + b // 2 + c // 2 + a % 2 + b % 2 + c % 2)
но формула эта считает неверно, например вот данные (кол-во учеников):
25
21
23

Тут в уме можно сосчитать - 69 учеников, следовательно нужно 35 парт. Правильным ответом же считается 36.
Или я дурак, или завхоз в этой школы что-то мутит с бухгалтерией
0
21.09.2016, 01:58  [ТС]

Не по теме:

superuser1, ну, если вспомнить школьные годы, то учитель тоже сидел за партой (по крайней мере так было у меня в школе), так что такие бухгалтерские "замутки" завхоза можно оправдать=)
Что касается сайта pythontutor.ru, то в целом задачи на нем очень даже не плохие, для начинающих программировать на python самое оно, но вот по достижении 15-го урока возникает проблема что делать дальше, ведь сайт не обновляется вот уже несколько лет, к тому же от качества некоторых заданий происходит не реальнейший батхерт. Особенно с 15-го урока. Там есть задание, описание которого просто вынесло мне мозг своей нелепостью. Если кому интересно, то вот ссылка

0
1 / 1 / 0
Регистрация: 18.09.2016
Сообщений: 18
21.09.2016, 05:35
Zodt,
да, согласен, сайт все же неплох, единственное что напрягает бывает, это подобные задания, да еще бывают с пометкой, при выполнении урока не пользоваться тем то и темто. Правильно ли это так сказать с педагогической точки зрения, заставлять делать что-то далеко не лучшим способом. Я конечно понимаю что во многом тут тренировка соображалки, но все равно, стоит ли забивать чистый еще мозг овнокодом с первых уроков? Да и к тому же после фейла с партами постоянно подвох ищешь.
а в остальном гуд ресурс)
0
36 / 30 / 13
Регистрация: 08.12.2012
Сообщений: 810
10.08.2017, 18:57
Python
1
len(set(text.split()))
а как тогда весь код выглядит , не понятно что такое text
0
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
10.08.2017, 22:47
Цитата Сообщение от ujif Посмотреть сообщение
не понятно что такое text
Внезапно
0
36 / 30 / 13
Регистрация: 08.12.2012
Сообщений: 810
11.08.2017, 13:09
Цитата Сообщение от Garry Galler Посмотреть сообщение
Внезапно
__________

Цитата Сообщение от Garry Galler Посмотреть сообщение
Внезапно
____________
Цитата Сообщение от Garry Galler Посмотреть сообщение
Внезапно
заказы заказы

Добавлено через 13 часов 55 минут
Цитата Сообщение от Zodt Посмотреть сообщение
c = ' '.join(''.join(x for x in input() if x.isalpha() or x.isspace()) for i in range(a))
не могли бы вы записать этот код в несколько строк, у меня ничего не выходит и понять не могу как
он работает, Почему join перед = с открытыми кавычками
мой овнокод не работает
Python
1
2
3
4
5
6
7
8
a=2
c=[]
for i in range(a):
    for x in input():
        if x.isalpha() or x.isspace():
            c.append(x)
 
print(''.join(c), sep=' ')
0
 Аватар для Pavelpds
8 / 8 / 0
Регистрация: 26.01.2019
Сообщений: 35
27.01.2019, 23:35
Похожая задача на coursera:
Во входном файле (вы можете читать данные из sys.stdin, подключив библиотеку sys) записан текст. Словом считается последовательность непробельных символов идущих подряд, слова разделены одним или большим числом пробелов или символами конца строки. Определите, сколько различных слов содержится в этом тексте.
Формат ввода
Вводится текст.
Формат вывода
Выведите ответ на задачу.

Тест 1
Входные данные:
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

Мой код:
Python
1
2
3
4
import sys
 
for line in sys.stdin:
    print(len(set(str(sys.stdin.read()).split())))
Ответ: 17
Подскажите пожалуйста, в чем ошибка???
P.S.: А если убираю split(), то ответ 21
0
1293 / 677 / 367
Регистрация: 07.01.2019
Сообщений: 2,300
28.01.2019, 05:18
Pavelpds,

Python
1
2
3
import sys
 
print(len(set(sys.stdin.read().split())))
4
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
28.01.2019, 05:18
Помогаю со студенческими работами здесь

Количество слов в тексте
Код должен считать ко-ло введенных слов. Пример: Тест 1 Входные данные: She sells sea shells on the sea shore; The shells that...

Количество слов в тексте?
Если можно,то не в одну строчку,чтоб понял (Спасибо). Надо найти,сколько слов в тексте : Пример: Ввод: She sells sea shells...

Определить количество слов в тексте
Определить количество слов в тексте и вывести каждое слово на новой строке.

Задача «Количество слов в тексте»
Подскажите в чем разница м/д add и update? И почему в данной задаче, если поставить add вместо update, то выдаст ошибку? Условие Дан...

Как посчитать количество слов в тексте?
Вот вопрос - есть текст с пробелами, запятыми, многоточиями, дефисами и тире. Как посчитать количество слов в тексте?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Ниже машинный перевод статьи The Thinkpad X220 Tablet is the best budget school laptop period . Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы,. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru