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))
我正在尝试编写一个程序,提示用户输入字符串。然后程序返回字符串中的元音数量。但是,代码只返回字母数,而不考虑只返回元音。
答案 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)
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))
这个问题的核心是,布尔也是我们可以求和的数字。如果您要处理大量文字并需要提高效率,则可以VOWELS
为set('aeiou')
。我们可以用生成器表达式替换count
初始化和for
循环:
count = sum(1 for c in sentence.lower() if c in VOWELS)
这可能比列表理解更好,因为它不会创建一次性列表并避免第二次处理字母的子集。