Подсчет, сколько раз появляется каждая гласная - PullRequest
0 голосов
/ 15 мая 2018

Я написал небольшую программу для подсчета того, сколько раз каждая гласная фигура появляется в списке, но она не возвращает правильное количество, и я не понимаю, почему:

vowels = ['a', 'e', 'i', 'o', 'u']
vowelCounts = [aCount, eCount, iCount, oCount, uCount] = (0,0,0,0,0)
wordlist = ['big', 'cats', 'like', 'really']

for word in wordlist:
    for letter in word:
        if letter == 'a':
            aCount += 1
        if letter == 'e':
            eCount += 1
        if letter == 'i':
            iCount += 1
        if letter == 'o':
            oCount += 1
        if letter == 'u':
            uCount += 1
for vowel, count in zip(vowels, vowelCounts):
    print('"{0}" occurs {1} times.'.format(vowel, count))

Вывод

"a" occurs 0 times.
"e" occurs 0 times.
"i" occurs 0 times.
"o" occurs 0 times.
"u" occurs 0 times.

Однако, если я наберу aCount в оболочке Python, это даст мне 2, что правильно, поэтому мой код действительно обновил переменную aCount и правильно ее сохранил.Почему не выводится правильный вывод?

Ответы [ 4 ]

0 голосов
/ 15 мая 2018

Вы также можете использовать счетчик коллекций (это естественная функция при подсчете вещей, она возвращает словарь):

from collections import Counter

vowels = list('aeiou')
wordlist = ['big', 'cats', 'like', 'really']

lettersum = Counter(''.join(wordlist))

print('\n'.join(['"{}" occurs {} time(s).'.format(i,lettersum.get(i,0)) for i in vowels]))

Возвращает:

"a" occurs 2 time(s).
"e" occurs 2 time(s).
"i" occurs 2 time(s).
"o" occurs 0 time(s).
"u" occurs 0 time(s).

lettersum:

Counter({'l': 3, 'a': 2, 'e': 2, 'i': 2, 'c': 1, 'b': 1, 
         'g': 1, 'k': 1, 's': 1, 'r': 1, 't': 1, 'y': 1})
0 голосов
/ 15 мая 2018

Вы можете использовать словарь понимания:

vowels = ['a', 'e', 'i', 'o', 'u']
wordlist = ['big', 'cats', 'like', 'really']
new_words = ''.join(wordlist)
new_counts = {i:sum(i == a for a in new_words) for i in vowels}

Выход:

{'a': 2, 'e': 2, 'i': 2, 'o': 0, 'u': 0}
0 голосов
/ 15 мая 2018

В дополнение к тому, что @jpp сказал, что простые типы данных, такие как целые числа, возвращаются по значению, а не по ссылке, поэтому, когда вы назначаете это чему-то и изменяете то, на что оно не влияет

a = 10
b = a #b=a=10
b = 11 #b=11, a=10
print a, b
--> 10 11

я быЯ написал это к своему комментарию, но для этого мне нужна репутация: D

0 голосов
/ 15 мая 2018

Проблема с этой строкой:

vowelCounts = [aCount, eCount, iCount, oCount, uCount] = (0,0,0,0,0)

vowelCounts не обновляется, если вы начинаете увеличивать aCount позже.

Установка a = [b, c] = (0, 0) эквивалентна a = (0, 0) и [b, c] = (0, 0).Последнее эквивалентно установке b = 0 и c = 0.

Переупорядочьте свою логику, как показано ниже, и она будет работать:

aCount, eCount, iCount, oCount, uCount = (0,0,0,0,0)

for word in wordlist:
    for letter in word:
        # logic 

vowelCounts = [aCount, eCount, iCount, oCount, uCount]

for vowel, count in zip(vowels, vowelCounts):
    print('"{0}" occurs {1} times.'.format(vowel, count))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...