运行此代码时,我得到的输出是单词中字母的数量,而不是其具有的元音数量。
main():
word = str(input('Give me a word '))
vowels = 0
i = 0
while i < len(word):
if word[i] == "o" or "i" or "e" or "u" or "a":
vowels += 1
i += 1
print('Number of vowels is: ' + str(vowels))
main()
答案 0 :(得分:2)
您的问题在于:
if word[i] == "o" or "i" or "e" or "u" or "a":
基本上,您只检查word[i] == "o"
。您需要像这样提供所有支票:
您需要像这样对word[i]
进行多次检查:
if word[i] == "o" or word[i] == "i" or word[i] == "e" or word[i] == "u" or word[i] == "a":
因此您的函数应如下所示:
def main():
word = str(input('Give me a word '))
vowels = 0
i = 0
while i < len(word):
if word[i] == "o" or word[i] == "i" or word[i] == "e" or word[i] == "u" or word[i] == "a":
vowels += 1
i += 1
print('Number of vowels is: ' + str(vowels))
main()
答案 1 :(得分:1)
尝试一下:
def main():
word = input('Give me a word ')
vowel_count = sum(ch in set("aeiou") for ch in word)
print('Number of vowels is: {}'.format(vowel_count))
main()
通过使用集合,查找字母是否在集合中会更快。同样,对字符串进行迭代还可以测试字符串中的每个字符,以查看其是否在元音集中。
答案 2 :(得分:1)
为什么不sum
:
word=input('Give me a word ')
print(sum(1 for i in word if i in 'aeiou'))
答案 3 :(得分:1)
>>> def main():
... word = str(input('Give me a word ')).lower()
... return sum([word.count(x) for x in ['a','e','i','o','u']])
...
>>> main()
Give me a word This is a test string
5
>>>
尝试一下。 您的代码的问题在于,仅当找到元音时,它才会递增“ i”。另一个问题是
>>> bool('i')
True
>>> bool('o')
True
'i'和'o'以及其他字符本身为True,因此对所有字符都为true,这使它可以计算所有字符而不仅仅是元音。
答案 4 :(得分:1)
问题出在if word[i] == "o" or "i" or "e" or "u" or "a":
。
您只能判断是否为“ o”,然后if word[i] == "o" or "i" or "e" or "u" or "a":
总是正确。因此,每个单词都算作vowels
。
您的原始代码陷入死循环,请在下面关注我的提示
您应该更改为:
while i < len(word):
if word[i] == "o" or word[i] == "i" or word[i] == "e" or word[i] == "u" or word[i] == "a"::
vowels += 1
i += 1 #btw you get dead-loop here on your origin code
但是最好的方法是:
def main():
word = str(input('Give me a word '))
vowels = 0
i = 0
while i < len(word):
if word[i].lower() in ["o","i","e","u","a"]:
vowels += 1
i += 1
print('Number of vowels is: ' + str(vowels))
main()