Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.60/775: Рейтинг темы: голосов - 775, средняя оценка - 4.60
0 / 0 / 1
Регистрация: 28.05.2014
Сообщений: 8

Подсчитать количество гласных (согласных) букв в слове

30.05.2014, 20:45. Показов 148928. Ответов 24
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
я нуб.народ подскажите, как подсчитывать количество гласных, согласных в слове. я понимаю, есть вариант использования словаря...а можно по другому?нужен код.спасибо
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
30.05.2014, 20:45
Ответы с готовыми решениями:

Количество гласных и согласных букв в слове
C. MOI2020_Z03 Ограничение времени 1 секунда Ограничение памяти 64Mb Ввод стандартный ввод или input.txt Вывод стандартный вывод...

Подсчитать количество гласных и согласных букв в файле
Дан файл. Необходимо подсчитать количество гласных и согласных букв в файле далее: Если согласных больше то найти самую часто...

Файл: Подсчитать количество гласных и согласных букв в строке?
Надо подсчитать количество гласных и согласных букв в строке? Строка записана в текстовом файле.

24
26 / 26 / 5
Регистрация: 14.05.2014
Сообщений: 250
30.05.2014, 21:15
перебераем в цикле строку сравнивая с наборами гласных и согласных букв каждый символ и считаем
0
272 / 266 / 146
Регистрация: 02.08.2012
Сообщений: 609
31.05.2014, 11:34
Лучший ответ Сообщение было отмечено Vazza как решение

Решение

Python
1
2
3
4
5
6
7
8
9
10
11
12
word = "Python"
vowels = 0
consonants = 0
for i in word:
    letter = i.lower()
    if letter == "a" or letter == "e" or\
       letter == "i" or letter == "o" or\
       letter == "u" or letter == "y":
        vowels += 1
    else:
        consonants += 1
print("Vowels %i\nConsonants %i" % (vowels, consonants))
0
0 / 0 / 1
Регистрация: 28.05.2014
Сообщений: 8
31.05.2014, 12:03  [ТС]
даже и не думал, что в английском алфавите всего 6 гласных.спасибо. всё оказывается так просто
0
2838 / 1647 / 254
Регистрация: 03.12.2007
Сообщений: 4,222
31.05.2014, 12:24
Цитата Сообщение от Vazza Посмотреть сообщение
я понимаю, есть вариант использования словаря...а можно по другому?
Только вот зачем? Со словарём (или множествами) ещё проще...
0
3258 / 2060 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
31.05.2014, 13:39
Лучший ответ Сообщение было отмечено Vazza как решение

Решение

GuGo1991, когда вижу такой код, у меня включается зануда-mode. Код скорее похож на сишный, который очень хочет быть питоном.
По стилю- это как раз тот случай, когда использование скобок в длинном условии допустимо, чтобы не разрывать строки бэкслешами.
Но даже так - куча условий, которые легко заменяются одной питоняшной конструкцией вида if item in list.
Еще можно придраться к логике. Например, такие слова как plug-in, add-on являются составными и могут писаться через дефис. По этой логике дефис будет посчитан как согласная. Т.е. проверять нужно только буквы.

В связи с этим альтернативный вариант:
Python
1
2
3
4
5
6
7
8
9
10
11
def count_v2(word):
    vowels = 0
    consonants = 0
    for letter in word:
        if letter.isalpha():
            if letter.lower() in 'aeiouy':
                vowels += 1
            else:
                consonants += 1
 
    return (vowels, consonants)
По сравнению с первым и генерируемый байткод будет компактнее:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
from dis import dis
 
def count_v1(word):
    vowels = 0
    consonants = 0
    for i in word:
        letter = i.lower()
        if letter == "a" or letter == "e" or\
           letter == "i" or letter == "o" or\
           letter == "u" or letter == "y":
            vowels += 1
        else:
            consonants += 1
 
    return (vowels, consonants)
 
 
def count_v2(word):
    vowels = 0
    consonants = 0
    for letter in word:
        if letter.isalpha():
            if letter.lower() in 'aeiouy':
                vowels += 1
            else:
                consonants += 1
 
    return (vowels, consonants)
 
 
def main():
    word = 'add-on'
    print(count_v1(word))
    print(count_v2(word))
 
    print(dis(count_v1))
    print('*' * 80)
    print(dis(count_v2))
 
 
if __name__ == '__main__':
    main()
v1
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
  4           0 LOAD_CONST               1 (0)
              3 STORE_FAST               1 (vowels)
 
  5           6 LOAD_CONST               1 (0)
              9 STORE_FAST               2 (consonants)
 
  6          12 SETUP_LOOP             121 (to 136)
             15 LOAD_FAST                0 (word)
             18 GET_ITER
        >>   19 FOR_ITER               113 (to 135)
             22 STORE_FAST               3 (i)
 
  7          25 LOAD_FAST                3 (i)
             28 LOAD_ATTR                0 (lower)
             31 CALL_FUNCTION            0 (0 positional, 0 keyword pair)
             34 STORE_FAST               4 (letter)
 
  8          37 LOAD_FAST                4 (letter)
             40 LOAD_CONST               2 ('a')
             43 COMPARE_OP               2 (==)
             46 POP_JUMP_IF_TRUE       109
             49 LOAD_FAST                4 (letter)
             52 LOAD_CONST               3 ('e')
             55 COMPARE_OP               2 (==)
             58 POP_JUMP_IF_TRUE       109
 
  9          61 LOAD_FAST                4 (letter)
             64 LOAD_CONST               4 ('i')
             67 COMPARE_OP               2 (==)
             70 POP_JUMP_IF_TRUE       109
             73 LOAD_FAST                4 (letter)
             76 LOAD_CONST               5 ('o')
             79 COMPARE_OP               2 (==)
             82 POP_JUMP_IF_TRUE       109
 
 10          85 LOAD_FAST                4 (letter)
             88 LOAD_CONST               6 ('u')
             91 COMPARE_OP               2 (==)
             94 POP_JUMP_IF_TRUE       109
             97 LOAD_FAST                4 (letter)
            100 LOAD_CONST               7 ('y')
            103 COMPARE_OP               2 (==)
            106 POP_JUMP_IF_FALSE      122
 
 11     >>  109 LOAD_FAST                1 (vowels)
            112 LOAD_CONST               8 (1)
            115 INPLACE_ADD
            116 STORE_FAST               1 (vowels)
            119 JUMP_ABSOLUTE           19
 
 13     >>  122 LOAD_FAST                2 (consonants)
            125 LOAD_CONST               8 (1)
            128 INPLACE_ADD
            129 STORE_FAST               2 (consonants)
            132 JUMP_ABSOLUTE           19
        >>  135 POP_BLOCK
 
 15     >>  136 LOAD_FAST                1 (vowels)
            139 LOAD_FAST                2 (consonants)
            142 BUILD_TUPLE              2


v2
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
 19           0 LOAD_CONST               1 (0)
              3 STORE_FAST               1 (vowels)
 
 20           6 LOAD_CONST               1 (0)
              9 STORE_FAST               2 (consonants)
 
 21          12 SETUP_LOOP              70 (to 85)
             15 LOAD_FAST                0 (word)
             18 GET_ITER
        >>   19 FOR_ITER                62 (to 84)
             22 STORE_FAST               3 (letter)
 
 22          25 LOAD_FAST                3 (letter)
             28 LOAD_ATTR                0 (isalpha)
             31 CALL_FUNCTION            0 (0 positional, 0 keyword pair)
             34 POP_JUMP_IF_FALSE       19
 
 23          37 LOAD_FAST                3 (letter)
             40 LOAD_ATTR                1 (lower)
             43 CALL_FUNCTION            0 (0 positional, 0 keyword pair)
             46 LOAD_CONST               2 ('aeiouy')
             49 COMPARE_OP               6 (in)
             52 POP_JUMP_IF_FALSE       68
 
 24          55 LOAD_FAST                1 (vowels)
             58 LOAD_CONST               3 (1)
             61 INPLACE_ADD
             62 STORE_FAST               1 (vowels)
             65 JUMP_ABSOLUTE           81
 
 26     >>   68 LOAD_FAST                2 (consonants)
             71 LOAD_CONST               3 (1)
             74 INPLACE_ADD
             75 STORE_FAST               2 (consonants)
             78 JUMP_ABSOLUTE           19
        >>   81 JUMP_ABSOLUTE           19
        >>   84 POP_BLOCK
 
 28     >>   85 LOAD_FAST                1 (vowels)
             88 LOAD_FAST                2 (consonants)
             91 BUILD_TUPLE              2
             94 RETURN_VALUE
1
272 / 266 / 146
Регистрация: 02.08.2012
Сообщений: 609
31.05.2014, 14:04
0x10, замысел был подать идею )
0
2742 / 2341 / 620
Регистрация: 19.03.2012
Сообщений: 8,830
31.05.2014, 17:02
Vazza, С помощью множеств можно и проще решить задачу, не прибегая к использованию циклов.
Python
1
2
3
4
5
6
word = "Python"
vowels = set("aeiouy")
word_set = set(word.lower())
 
print('Гласных {}, согласных {}'.format(len(word_set.intersection(vowels)),
                                        len(word_set.difference(vowels))))
Обработку особых ситуаций с словами типа plug-in делать, не стал, так как если понадобится сами быстро сделаете, а я лишь хотел показать ещё вариант решения.
0
2838 / 1647 / 254
Регистрация: 03.12.2007
Сообщений: 4,222
31.05.2014, 17:33
Так это получилось количество различных гласных/согласных. А так это типа
Python
1
sum(letter in vowels for letter in word)
0
0 / 0 / 1
Регистрация: 28.05.2014
Сообщений: 8
31.05.2014, 19:43  [ТС]
Somebody, самый красивый вариант
0
2742 / 2341 / 620
Регистрация: 19.03.2012
Сообщений: 8,830
31.05.2014, 20:24
Vazza, это не вариант, а отрывок от кода
0
20 / 21 / 6
Регистрация: 30.06.2015
Сообщений: 431
14.02.2016, 19:47
Ребята , объясните значение пятой строчки в сообщении (коде) GuGo1991 . спасибо.

Добавлено через 1 минуту
Python
1
2
3
4
5
6
7
a = input()
b = list(a)
c = 0
for i in b:
    if i == "a" or "e" or "i" or "o" or "u" or "y":
        c += 1
        print(c)
Что не так с моим кодом? почему он просто длину считает?
0
Эксперт по компьютерным сетям
 Аватар для Jabbson
5907 / 3359 / 1036
Регистрация: 03.11.2009
Сообщений: 10,008
14.02.2016, 19:55
потому что Вы не понимаете, что делаете.
Python
1
if i in ['a', 'e', 'i', 'o', 'u']:
Добавлено через 1 минуту
Python
1
print(len([1 for x in list(input()) if x in ['a', 'e', 'i', 'o', 'u']]))
0
2838 / 1647 / 254
Регистрация: 03.12.2007
Сообщений: 4,222
14.02.2016, 20:21
Python
len([1 for x in list(input()) if x in ['a', 'e', 'i', 'o', 'u']])
Python
sum(1 for x in input() if x in 'aeiou')
0
Эксперт по компьютерным сетям
 Аватар для Jabbson
5907 / 3359 / 1036
Регистрация: 03.11.2009
Сообщений: 10,008
14.02.2016, 20:27
Это отличное замечание, этот код и быстрее и компактнее.
Сумма займет больше времени, чем len, но отказ от листов прибавит нормально.
0
20 / 21 / 6
Регистрация: 30.06.2015
Сообщений: 431
14.02.2016, 21:09
спасибо!разобрался.
0
171 / 92 / 71
Регистрация: 10.05.2014
Сообщений: 432
14.02.2016, 21:45
Python
1
2
3
4
a = input().lower()   #Переводим все буквы в нижний регистр
s = ['b', 'c', 'd', 'f', 'g','h','j','k','l','m','n','p','q','r','s','t','v','w','x','z']   #Массив, содержащий согласные буквы
t = ['a', 'e', 'i', 'o', 'u','y']   #Массив, содержащий гласные буквы
print(len([1 for x in list(a) if x in t]),len([1 for x in list(a) if x in s]),sep=' ',end='\n')   #Вывод подсчета количества гласных и согласных букв в слове/словах
0
Эксперт NIX
 Аватар для Marinero
2796 / 2039 / 682
Регистрация: 02.03.2015
Сообщений: 6,509
14.02.2016, 21:56
Цитата Сообщение от Somebody Посмотреть сообщение
Python
1
sum(1 for x in input() if x in 'aeiou')
Ещё можно чуть короче
Python
1
sum(x in 'aeiou' for x in input())
0
2838 / 1647 / 254
Регистрация: 03.12.2007
Сообщений: 4,222
16.02.2016, 20:16
Цитата Сообщение от Marinero Посмотреть сообщение
Ещё можно чуть короче
Python
1
sum(x in 'aeiou' for x in input())
Это было в посте #9, но такой вариант медленнее.
0
Эксперт NIX
 Аватар для Marinero
2796 / 2039 / 682
Регистрация: 02.03.2015
Сообщений: 6,509
16.02.2016, 20:21
Цитата Сообщение от Somebody Посмотреть сообщение
такой вариант медленнее
Аргументируйте.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
16.02.2016, 20:21
Помогаю со студенческими работами здесь

Количество гласных букв в строке, количество согласных букв, количество цифр и прочих знаков
пользователь вводит строку, нужно вывести количество гласных букв в строке, количество согласных букв, количество цифр и прочих знаков ....

Определить количество слов в тексте, начинающихся с гласных и согласных букв
Добрый день! Не получается решить задачу: Напишите функцию, которая будет подсчитывать, сколько слов начинается на гласные, а...

Вывести количество гласных и согласных букв в процентном соотношении(программа есть, надо изменить)
word = input() glasnye = 0 soglasnye = 0 for i in word: letter = i.lower() if letter == "a" or letter == "e" or\ ...

Найти и сохранить в строке те слова текста, которые содержат одинаковое количество гласных и согласных букв алфавита
Дана строка. Словом текста считается любая последовательность букв русского алфавита; между соседними словами - не менее одного пробела, за...

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


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
Установка Emscripten SDK (emsdk) и CMake на Windows для сборки C и C++ приложений в WebAssembly (Wasm)
8Observer8 30.01.2026
Чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. Система контроля версиями Git. . .
Подключение Box2D v3 к SDL3 для Android: физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
Влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru