2016-02-04 72 views
1

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

但是,这只是打印出一个无限循环的零。

+7

无限循环? '而真'将导致... –

+0

当您正在查找物品时,还可以使用一套而不是一个列表。你可以说元音=设置(元音) – sisanared

+3

@shravster - 这是一个很小的性能差异,并没有解决这里的问题 –

回答

2

您需要遍历您inputphrase:

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 
while index < len(inputphrase): 
    if inputphrase[index] in vowels: 
     i += 1 
    index += 1 
print(i) 
+0

我知道使用for循环会工作,但有什么方法可以使用while循环吗? – MonkeyMaker21

+0

@MatthewGaray我不知道你为什么想这样做,但肯定,看看编辑。 – L3viathan

+3

**而**在这里并不特别合适。当你进入循环时,你确切地知道你需要经历多少次。退出条件不依赖于循环内部的内容。这使得**成为适当的选择。 – Prune

2
print len([i for i in inputphrase if i in vowels]) 
+4

总是有一个代码打高尔夫球的地方;) – Weboide

+2

'sum(1 for in in inputphrase if I in vowels)''better better ... – dawg

+3

'sum(inputphrase.count(x)for x in vowels)' – L3viathan

0

你也可以使用collections

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

这个总和inputphrase中的所有元音,但其他解决方案计算出现的次数,所以也许我只是误解了这个问题... –

+0

@innoSPG This显然是一个答案。这可能是错误的或不完整的,但它是一个答案。如果它是错误的,倒投它。请正确使用审阅队列,并只删除那些不是答案的东西。 – Andy

+0

@安迪,我很快判断错了;最初的答案是“你也可以使用'收集'”,如果没有给予足够的重视,很容易错失判断。对不起Juraj。请确保不要因为这样的介绍而让你的答案如此薄弱。我删除了评论。 – innoSPG