Форум программистов, компьютерный форум, киберфорум
Наши страницы
Python
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.61/56: Рейтинг темы: голосов - 56, средняя оценка - 4.61
Vazza
0 / 0 / 1
Регистрация: 28.05.2014
Сообщений: 8
1

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

30.05.2014, 20:45. Просмотров 11702. Ответов 20
Метки нет (Все метки)

я нуб.народ подскажите, как подсчитывать количество гласных, согласных в слове. я понимаю, есть вариант использования словаря...а можно по другому?нужен код.спасибо
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.05.2014, 20:45
Ответы с готовыми решениями:

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

Определить каких букв - гласных или согласных больше в тексте
Дан текст из цифр и строчных латинских букв, за которым следует точка....

Посчитать количество гласных букв в стихотворении
Дан текст из стихотворения А.С Пушкина. Посчитать количество гласных букв в...

Распечатать строку с наибольшим количеством согласных букв
Написать программу, которая запрашивает у пользователя имя файла со...

Замена всех букв в слове. Нужно доработать.
Составьте программу, позволяющую проверить, есть ли в слове буква "б". Если...

20
tutunak
26 / 26 / 6
Регистрация: 14.05.2014
Сообщений: 250
30.05.2014, 21:15 2
перебераем в цикле строку сравнивая с наборами гласных и согласных букв каждый символ и считаем
0
GuGo1991
270 / 264 / 146
Регистрация: 02.08.2012
Сообщений: 609
31.05.2014, 11:34 3
Лучший ответ Сообщение было отмечено 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
Vazza
0 / 0 / 1
Регистрация: 28.05.2014
Сообщений: 8
31.05.2014, 12:03  [ТС] 4
даже и не думал, что в английском алфавите всего 6 гласных.спасибо. всё оказывается так просто
0
Somebody
2802 / 1613 / 251
Регистрация: 03.12.2007
Сообщений: 4,215
Завершенные тесты: 3
31.05.2014, 12:24 5
Цитата Сообщение от Vazza Посмотреть сообщение
я понимаю, есть вариант использования словаря...а можно по другому?
Только вот зачем? Со словарём (или множествами) ещё проще...
0
0x10
2580 / 1759 / 289
Регистрация: 24.11.2012
Сообщений: 4,391
31.05.2014, 13:39 6
Лучший ответ Сообщение было отмечено 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
Код
  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
Код
 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
GuGo1991
270 / 264 / 146
Регистрация: 02.08.2012
Сообщений: 609
31.05.2014, 14:04 7
0x10, замысел был подать идею )
0
alex925
2675 / 2281 / 631
Регистрация: 19.03.2012
Сообщений: 8,831
31.05.2014, 17:02 8
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
Somebody
2802 / 1613 / 251
Регистрация: 03.12.2007
Сообщений: 4,215
Завершенные тесты: 3
31.05.2014, 17:33 9
Так это получилось количество различных гласных/согласных. А так это типа
Python
1
sum(letter in vowels for letter in word)
0
Vazza
0 / 0 / 1
Регистрация: 28.05.2014
Сообщений: 8
31.05.2014, 19:43  [ТС] 10
Somebody, самый красивый вариант
0
alex925
2675 / 2281 / 631
Регистрация: 19.03.2012
Сообщений: 8,831
31.05.2014, 20:24 11
Vazza, это не вариант, а отрывок от кода
0
izuchaju_python
19 / 20 / 6
Регистрация: 30.06.2015
Сообщений: 431
14.02.2016, 19:47 12
Ребята , объясните значение пятой строчки в сообщении (коде) 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
Эксперт по компьютерным сетям
3353 / 2427 / 746
Регистрация: 03.11.2009
Сообщений: 7,759
Записей в блоге: 3
14.02.2016, 19:55 13
потому что Вы не понимаете, что делаете.
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
Somebody
2802 / 1613 / 251
Регистрация: 03.12.2007
Сообщений: 4,215
Завершенные тесты: 3
14.02.2016, 20:21 14
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
Эксперт по компьютерным сетям
3353 / 2427 / 746
Регистрация: 03.11.2009
Сообщений: 7,759
Записей в блоге: 3
14.02.2016, 20:27 15
Это отличное замечание, этот код и быстрее и компактнее.
Сумма займет больше времени, чем len, но отказ от листов прибавит нормально.
0
izuchaju_python
19 / 20 / 6
Регистрация: 30.06.2015
Сообщений: 431
14.02.2016, 21:09 16
спасибо!разобрался.
0
Zodt
156 / 79 / 69
Регистрация: 10.05.2014
Сообщений: 420
14.02.2016, 21:45 17
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
Marinero
Модератор
Эксперт NIX
2142 / 1723 / 585
Регистрация: 02.03.2015
Сообщений: 5,635
14.02.2016, 21:56 18
Цитата Сообщение от Somebody Посмотреть сообщение
Python
1
sum(1 for x in input() if x in 'aeiou')
Ещё можно чуть короче
Python
1
sum(x in 'aeiou' for x in input())
0
Somebody
2802 / 1613 / 251
Регистрация: 03.12.2007
Сообщений: 4,215
Завершенные тесты: 3
16.02.2016, 20:16 19
Цитата Сообщение от Marinero Посмотреть сообщение
Ещё можно чуть короче
Python
1
sum(x in 'aeiou' for x in input())
Это было в посте #9, но такой вариант медленнее.
0
Marinero
Модератор
Эксперт NIX
2142 / 1723 / 585
Регистрация: 02.03.2015
Сообщений: 5,635
16.02.2016, 20:21 20
Цитата Сообщение от Somebody Посмотреть сообщение
такой вариант медленнее
Аргументируйте.
0
16.02.2016, 20:21
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.02.2016, 20:21

Подсчитать статистику встречаемости букв в тексте с учетом их регистра
Подсчитать статистику встречаемости букв в тексте с учетом их регистра. Я...

Подсчитать количество гласных и согласных букв в каждом слове
Помогите пожалуйста решить задачки. 1.ввести в ЭВМ предложения длинной не...

Подсчитать количество согласных в первом слове предложения и гласных - в последнем
ввести в ЭВМ предложение не более 70 символов. подсчитать кол-во согласных в...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru