使用Python中的for循环计算字符串中元音的数量

时间:2017-09-25 03:13:33

标签: python

Python代码:

sentence = input('Enter a string:')
vowel = 'A,a,E,e,I,i,O,o,U,u'
Count = 0
for vowel in sentence:
   Count += 1
print('There are {} vowels in the string: \'{}\''.format(Count,sentence))

我正在尝试编写一个程序,提示用户输入字符串。然后程序返回字符串中的元音数量。但是,代码只返回字母数,而不考虑只返回元音。

9 个答案:

答案 0 :(得分:3)

你已经定义了一串元音,但是正在重新定义循环中的变量元音。

我建议您定义一个set个元音,然后根据if支票递增您的计数器。

vowels = set('aeiou')  

counter = 0
for c in sentence.lower():
    if c in vowels:
        counter += 1

此处,如果if c in vowels是元音,True将返回c(即c属于vowels中存储的元音集合)

您可以使用collections.Counter对象改进此解决方案:

from collections import Counter

c = Counter(sentence.lower())
counter = sum(c[v] for v in set('aeiou'))

或者,您可以使用list comprehension并计算其长度。

答案 1 :(得分:2)

我认为最好的方法是使用简单的RegEx。 匹配元音的正则表达式为[aeiou](如果您也想匹配“ y”,则为[aeiouy])。

您可以使用re.findall查找句子中所有元音的出现,并使用re.IGNORECASE标志忽略大小写。

>>> import re
>>> sentence = "my name is Jessica"
>>> len(re.findall(r'[aeiou]', sentence, flags=re.IGNORECASE))
6

此解决方案的优点是您可以轻松扩展它以添加加重字符或其他unicode字符:

>>> import re
>>> sentence = "Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !"
>>> len(re.findall(r'[aeiouyàâèéêëiïîöôüûùæœÿ]', sentence, flags=re.IGNORECASE))
41

答案 2 :(得分:0)

如果句子中的字母是元音,你不会在任何地方查看。语法for x in y:定义了一个可迭代对象(字符串,列表等)的循环,其中对于每个循环迭代,变量x被设置为该可迭代的下一个元素。

您的行for vowel in sentence:只是定义一个循环,其中vowel被分配给输入句子的每个字母。您先前的vowel = ...声明在此处无效。

实现预期结果的一个不错的1-liner将是:

sentence = input('Enter a string:')
vowels = 'aeiou'
count = len([c for c in sentence.lower() if c in vowels])

答案 3 :(得分:0)

发生这种情况是因为你没有验证这封信是否是一个元音。当你在for循环中放入'元音在句子中'时,你只需要覆盖元音中的元素,并且元音成为每个循环迭代的句子上的每个字母。

sentence = input('Enter a string:')
vowel = 'A,a,E,e,I,i,O,o,U,u'
Count = 0
for letter in sentence:
  if letter in vowel.split(','):
    Count += 1
print('There are {} vowels in the string: \'{}\''.format(Count,sentence))

答案 4 :(得分:0)

使用python 3:

sentence = input('Enter a string:')
vowels = 'A,a,E,e,I,i,O,o,U,u'
Count = 0
for each_char in sentence:
    if each_char in vowels:
        Count += 1 
print('There are {} vowels in the string: \'{}\''.format(Count,sentence))

答案 5 :(得分:0)

这是我使用Counter of collections

的代码
import collections
vowel = ['a', 'e', 'i', 'o', 'u']
count = 0

sentence = input('Enter a string:').lower()
counter = collections.Counter(sentence)
for word in counter:
    if word in vowel:
        count += counter[word]

print('There are {} vowels in the string: \'{}\''.format(count,sentence))

答案 6 :(得分:0)

sentence = input('Enter a string:')
Count = 0
for eachLetter in sentence:
    if eachLetter.lower() in ['a','e','i','o','u']:
        Count += 1
print('There are {} vowels in the string: \'{}\''.format(Count,sentence))

答案 7 :(得分:0)

我们只需要列表中的小写元音,因为我们只使用.lower()

将句子转换为小写

然后我们遍历每个元音并计算在.count()句子中找到的每个元音的数量。然后我们汇总总计数,直到我们最终得到总元音数。

sentence = 'This is a sentence'
vowels = ['a','e','i','o','u']
Count = 0
for vowel in vowels:
    Count = Count + sentence.lower().count(vowel)

答案 8 :(得分:0)

即使使用for循环约束,也不需要这么做:

VOWELS = 'aeiou'

sentence = input('Enter a string: ')

count = 0

for letter in sentence.lower():
    count += letter in VOWELS

print('There are {} vowels in the string: \'{}\''.format(count, sentence))

这个问题的核心是,布尔也是我们可以求和的数字。如果您要处理大量文字并需要提高效率,则可以VOWELSset('aeiou')。我们可以用生成器表达式替换count初始化和for循环:

count = sum(1 for c in sentence.lower() if c in VOWELS)

这可能比列表理解更好,因为它不会创建一次性列表并避免第二次处理字母的子集。