Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Центр помощи > [Python] Подсчет слов в строке |
Автор: Paranorma 29.1.2007, 19:43 | ||
Программка подсчитывает количество слов, разделенных произвольным количеством пробелов, во введенных строках. Split и for использовать нельзя. В очередной раз создается все с помощью while. Вероятно, используется и вложенный while (Я сама просто еще никак не могу понять)... Я начала так:
Например, я ввожу строку "house near the lake" или " house near the lake" (кол-во пробелов любое). В окне калькулятора соответственно должно появится число 4(в строке же 4 слова введено). |
Автор: Night_xxx 29.1.2007, 22:51 |
Не знаю как в Pythone но в паскале алгоритм посчета слов вот какой simvol=' '; int count = 0; for(int i = 0; i<(int)strlen(str) && str[i]!=0; i ++) { if(str[i] == simvol) count++; } cout<<count+1; Может поможет тебе понять как работает. Добавлено @ 22:54 ой не в паскале а в С++ |
Автор: Strannik 29.1.2007, 23:06 |
Алгоритм на словах (ибо питона не знаю): Идём по строке начиная со 2 символа и смотрим: если предыдущий символ не пробел и текущий символ пробел, то увеличить кол-во слов на 1. Если последний символ строки не пробел, то увеличить кол-во слов ещё на 1. |
Автор: doomik 29.1.2007, 23:34 | ||
|
Автор: Paranorma 29.1.2007, 23:39 | ||
![]() ![]() ![]() Я вот такую штучку накатала.
Но эта прога считает все буквы кроме пробела, а мне надо, чтоб не по буквам считала, а по словам. Кроме того нельзя было использовать for ![]() |
Автор: V.A.KeRneL 29.1.2007, 23:51 | ||
Night_xxx, очевидно, не понял задание и поэтому написал подсёт пробелов в строке + 1 на сях... ![]() А вот Strannik привёл действенный алгоритм. Вот его реализация:
Упс, долго писал, опередили. ![]() ... Хотя, нет, у меня лучше. ![]() |
Автор: Paranorma 29.1.2007, 23:59 | ||
doomik, огромное спасибо! Но воот эта часть
|
Автор: Strannik 30.1.2007, 00:01 | ||
Он написал абсолютно правильный алгоритм, но с условием что слова разделены только одним пробелом. |
Автор: Paranorma 30.1.2007, 00:11 |
Ребята! Всем огромное спасибо, что меня не бросаете! ![]() |
Автор: Strannik 30.1.2007, 00:31 | ||
Да согласен, согласен... просто есть у меня привычка такая... людей защищать и к объективности стремиться где надо и где не надо.. |
Автор: Paranorma 30.1.2007, 00:42 | ||
Я эту программку на свой лад (точнее, как препод любит) переделала
Как я вижу, эта программка нормально работает, только если введен один пробел между словами. если допустить что сначала я ввожу 6 пробелов, потом слово, потом 3 пробела и еще слово. Фишка в том, что слова должны подсчитываться независимо от количества пробелов между словами. Добавлено @ 00:44 Пардон! Я кажется сама с переделкой нагрешила, исправлюсь. |
Автор: V.A.KeRneL 30.1.2007, 09:32 |
Paranorma, в 13-ой строчке ``0'' на ``j - 1'' исправила, да? Ну так приведи лучше исправленый код, чем этот с ачипяткой. |
Автор: Paranorma 30.1.2007, 18:31 | ||
![]() Вот если надо написать прогу считающую слова но строки всегда начинаются именно со слова и заканчиваются словом. то есть тут строгое условие что никаких пробелов в начале и в конце, а все слова разделены только одним пробелом... Думала долго... изобразила этот бред, но не работает...
|
Автор: V.A.KeRneL 30.1.2007, 18:41 |
Paranorma, дык эта задача — частный слуай предыдущей. Зачем изобретать одноколёсный велосипед? ![]() ![]() Препод что ли требует? |
Автор: Paranorma 30.1.2007, 18:45 |
Ну а кто же? конечно, он. |
Автор: V.A.KeRneL 30.1.2007, 18:48 | ||
Ну, ладно, если надо, то пожалуйста:
Думать-то, слава богу, тут не надо совсем. ![]() |
Автор: Strannik 30.1.2007, 19:10 | ||
Но если сильно надо то вроде так: строки 11-14 меняем на
Я в питоне не силён, так что если что не так - извините. |
Автор: Paranorma 30.1.2007, 19:16 |
Спасибо тебе огромное! А то у меня 1 курс, вообще ничего не понимаю почти. ![]() ![]() |
Автор: Strannik 30.1.2007, 19:21 | ||
Тебе тоже! Ещё 10-20 вопросов и я Питон выучу! А вообще - главная сила это алгоритмы, если знаешь алгоритм то его можно реализовать на любом языке, даже на том которого почти не знаешь. |
Автор: V.A.KeRneL 30.1.2007, 21:00 | ||
«Тебе» или «вам»? ![]()
Это про меня! ![]() |
Автор: Strannik 30.1.2007, 23:18 | ||
В мозгу вопрошающих мы предстаём в виде одного многоликого и "всезнающего" программера. ой... что-то меня сегодня на оффтоп тянет, не к добру это... |
Автор: V.A.KeRneL 31.1.2007, 11:22 |
![]() |
Автор: Paranorma 1.2.2007, 13:41 |
Ребята, чего к словам цепляться? Конечно, всем спасибо! ![]() |
Автор: Alexeis 1.2.2007, 16:01 |
Модератор: прекращаем оффтоп. На 2 полезных сообщения 8 флейма. Есть же спец раздел. http://forum.vingrad.ru/index.php?showforum=193 |
Автор: Limpopo 1.2.2007, 23:52 | ||
попробуй так
Вот так можно выделять слово часть моей лабы если требует без пробелов то просто не прибавляй и измени условие включения в множество |
Автор: Alexeis 2.2.2007, 02:14 |
Limpopo, внимательно читайте заголовок. Язык программирования Python, а не делфи ![]() |
Автор: Paranorma 2.2.2007, 20:49 | ||
Ребята! Хотя бы поподробнее мне объясните, пожалуйста! Препод на счет задания еще вот какие рекомендации дал: - слова могут буть разделены любым количеством пробелов; - пробелы могут быть в начале и конце строки; - строка может состоять из одних пробелов; Подсказка: - надо завести перменную whiteSpace которая принимает начения False/True в зависимости о того является ли s[j] пробелом; - whiteSpace писваивается значение True перед обработкой очередной строки; - whiteSpace меняет свое значение с True на False в тот момент когда вы наталкиваитесь на начало слова. Именно в этот момент надо увеличивать счетчик слов Я накарябала вот что:
У меня все это не работает ![]() |
Автор: Strannik 2.2.2007, 22:25 | ||||||||
Чтот мне логика твоего препода не понятна.... Ну а вообще, кроме логики, в питоне условный оператор выглядит так:
А у тебя наоборот. Но и с логикой в проге что-то не то. Сейчас подумаю ещё... Добавлено @ 22:27
Агрх!! Я твоего прэпода рэзат буду!!!! Проги, которые мы постили - они для таких условий работают! И работают красиво, а не через ****, как хочет твой препод. Добавлено @ 22:32
Терпеть не могу огда препод дает задание и тычет под нос как это делать. Логика нормальной программы такова: Необходимо подсчитать кол-во ситуаций *начало слова*. Условие возникновения такой ситуации: s[i-1]=" " и s[i]!=" ". Всё, не надо никаких булевских переменных и т.д. Добавлено @ 22:37 Вот, шмат программы V.A. KeRnel который реализует эту схему (я этот код чтуь-чуть переделал):
|
Автор: V.A.KeRneL 3.2.2007, 18:36 | ||||||||||
Strannik, только индексация массивов (списков в питоновской терминологии) идёт не с 1 (как в Паскале), а с 0 (как в Си), поэтому непонятно к ему это измениение. ![]() Если пофиксить это (
), то, всё равно, придётся ещё заменить
на
А так, конечно, моя программа (http://forum.vingrad.ru/topic-134442/0.html#entry1017116) работает абсолютно корректно во всех случаях. (Если твоему преподу кажется, что не так, пусть приведёт контрпример.) (http://forum.vingrad.ru/topic-134442/15.html#entry1018169 — для http://forum.vingrad.ru/topic-134442/0.html#entry1018150 (упрощённого).) З.Ы. Paranorma, если тебе самой непонятно моё решение, то я могу продолжить http://forum.vingrad.ru/topic-134173/0.html#entry1015137, но ты почему-то http://forum.vingrad.ru/topic-134173/0.html#entry1015282... ![]() |
Автор: Strannik 3.2.2007, 19:25 | ||
Виноват, исправлюсь. А что и зачем я менял - уже не помню... вечер был, спать хотелось. |
Автор: V.A.KeRneL 3.2.2007, 21:30 | ||
Но если уж, преподу Paranorma'ы будет приятно через ***** (булевские переменные ![]()
|
Автор: Paranorma 4.2.2007, 00:05 | ||
Препод вот это просил, оказывается:
|
Автор: V.A.KeRneL 4.2.2007, 11:07 |
Paranorma, http://forum.vingrad.ru/topic-134442/30.html#entry1023219 моё решение аналогично. ![]() З.Ы. Нда, странный у вас препод. Он что, хочет, чтоб вы всё слово в слово писали, как он хочет? Т.е. учит вас не на программистов, а на Вольфов Мессингов?!. ![]() |