Python While与元组循环

Python While与元组循环,python,python-3.x,Python,Python 3.x,我正在写一个函数,它应该计算输入短语中的数字。该短语被存储为元组,while循环应该计算元音的数量。到目前为止,我已经得到了这个 def whilephrase(): vowels=['A','a','E','e','I','i','O','o','U','u'] print('Please give me a phrase') inputphrase=input() inputphrase=tuple(inputphrase) i=0 while

我正在写一个函数,它应该计算输入短语中的数字。该短语被存储为元组,while循环应该计算元音的数量。到目前为止,我已经得到了这个

def whilephrase():
    vowels=['A','a','E','e','I','i','O','o','U','u']
    print('Please give me a phrase')
    inputphrase=input()
    inputphrase=tuple(inputphrase)
    i=0
    while True:
        if vowels in inputphrase:
            i=i+1
        else:
            print(i)

但这只是打印出一个无休止的零循环。

您需要迭代输入短语:

for character in inputphrase:
    if character in vowels:
        i = i + 1
print(i)
当然,还有一个更简单的方法:

def count_vowels(string):
    return sum(1 for c in string if c.lower() in "aeiou")
编辑:使用while循环(尽管我不确定您为什么特别想要):

index=0
i=0
索引
您需要迭代输入短语:

for character in inputphrase:
    if character in vowels:
        i = i + 1
print(i)
当然,还有一个更简单的方法:

def count_vowels(string):
    return sum(1 for c in string if c.lower() in "aeiou")
编辑:使用while循环(尽管我不确定您为什么特别想要):

index=0
i=0
索引
您也可以使用
集合

from collections import Counter
sum([Counter(inputphrase)[i] for i in vowels])

您还可以使用
集合

from collections import Counter
sum([Counter(inputphrase)[i] for i in vowels])


无止境的循环<代码>为True时将导致…在查找项目时,也使用集合而不是列表。你可以说元音=set(元音)@shravster——这只是一个微小的性能差异,并不能解决这个问题<代码>为True时将导致…在查找项目时,也使用集合而不是列表。你可以说元音=集合(元音)@shravster-这是一个微小的性能差异,并不能解决这里的问题。我知道使用for循环是可行的,但是有没有办法使用while循环?@MatthewGaray我不知道你为什么想要这样,但是可以肯定的是,请参阅edit.while在这里并不特别合适。当你进入循环时,你就知道你需要经历多少次。退出条件不依赖于循环中的内容。这是正确的选择,没关系。很明显,我看到了一个中间版本,它在顶部仍然是正确的,不需要lambda。Do
sum(如果“aeiou”中的c.lower()为c,则InputPhase中的c为1)
我知道使用for循环会起作用,但有没有办法使用while循环?@MatthewGaray我不知道为什么您会想要这样,但可以肯定的是,请参阅edit.while在这里并不特别合适。当你进入循环时,你就知道你需要经历多少次。退出条件不依赖于循环中的内容。这是正确的选择,没关系。很明显,我看到了一个中间版本,它在顶部仍然是正确的,不需要lambda。Do
sum(如果'aeiou'中的c.lower()为c,则InputPhase中的c为1)
这将对InputPhase中的所有元音进行求和,但其他解决方案会计算出现的次数,因此可能我只是误解了问题…@innoSPG这显然是一个答案。它可能是错误的或不完整的,但它是一个答案。如果是错误的,就投反对票。请正确使用复习队列,只删除不属于答案的内容。@Andy,我判断错了,因为我很快就回答了;答案以“您也可以使用
收藏
”开头,很容易在没有足够注意的情况下做出错误判断。对不起,朱拉杰。请确保在这样的介绍下,不要让你的答案如此薄弱。我删除了评论。这将对InputPhase中的所有元音进行汇总,但其他解决方案会计算出现的次数,所以可能我只是误解了问题…@innoSPG这显然是一个答案。它可能是错误的或不完整的,但它是一个答案。如果是错误的,就投反对票。请正确使用复习队列,只删除不属于答案的内容。@Andy,我判断错了,因为我很快就回答了;答案以“您也可以使用
收藏
”开头,很容易在没有足够注意的情况下做出错误判断。对不起,朱拉杰。请确保在这样的介绍下,不要让你的答案如此薄弱。我删除了评论。
sum(输入短语.计数(x)表示元音中的x)
sum(输入短语.计数(x)表示元音中的x)