我是python的新手,在解决我的脚本时遇到一些困难。
我的任务是创建一些接受字符串列表的函数,并返回整个列表中的元音数。
我试图遵循的游戏计划是:
我的代码不优雅,但也不起作用。
def vowelCounter(listName):
new = ''.join(listName)
n = len(new)
count = 0
vowels = 'aeiouAEIOU'
i = 0
for i in range(0,n):
while i < n:
if new[i] in vowels:
count += 1
i += 1
return
print count
return
return
return
print(vowelCounter(["terrapin","station","13points"]))
请原谅我可能遇到的任何愚蠢错误。我一定会感谢您提供的任何帮助!
答案 0 :(得分:2)
首先,我们有一些一般的语法问题。
return
立即退出该功能;它不仅仅是#34;结束循环&#34;。i
到0
没有意义。 for
循环本身只会自动将i
设置为range()
返回的列表中的当前值。while i < n
是不必要的;没有必要为列表中的每个字符再次遍历字符串。i
; for
会自动为您执行此操作。print
函数内部的值,但您还尝试打印函数的返回值(但它不会返回任何内容!)。< / LI>
醇>
所以,如果我们解决了这些问题,我们就会有这样的事情:
def vowelCounter(listName):
vowels = 'aeiouAEIOU'
new = ''.join(listName)
count = 0
for i in range(0, len(new)):
if new[i] in vowels:
count += 1
return count
但Python也允许for
循环遍历字符串的每个字符,因此我们根本不需要range()
和len()
:
def vowelCounter(listName):
vowels = 'aeiouAEIOU'
count = 0
for char in ''.join(listName):
if char in vowels:
count += 1
return count
但我们可以通过List Comprehensions和sum()
功能让这更加精彩!
def vowelCounter(listName):
vowels = 'aeiouAEIOU'
count = sum([1 for char in ''.join(listName) if char in vowels])
return count
我们在这里基本上做的是为每个作为元音的字母制作1
的列表(如果它不是元音,我们不会在我们的任何字母中添加任何内容新名单)。然后我们使用sum()
将列表中的所有数字(1&#39; s)相加,这是我们的元音总数。
或者我们甚至可以将其作为一个单行:
def vowelCounter(listName):
return sum([1 for char in ''.join(listName) if char in 'aeiouAEIOU'])
答案 1 :(得分:1)
您提供的分步逻辑是正确的 但是,您发布的代码不遵循逻辑并且不正确。
请尝试使用以下代码:
def vowelCounter(listName):
string = ''.join(listName)
count = 0
vowels = 'aeiouAEIOU'
for ch in string:
if ch in vowels:
count += 1
return count
print(vowelCounter(["terrapin","station","13points"]))
答案 2 :(得分:0)
代码基本上没问题......但是
for i in ...
自动递增i
,因此不需要i += 1
for
执行循环...不需要在其中放置另一个while
循环return
退出该函数,您应该只在最后使用它来回馈使用return count
答案 3 :(得分:0)
>>> import re
>>> vowels = re.compile('[AEIOU]', re.IGNORECASE)
>>>
>>> def vowelCounter(listName):
... return len(vowels.split("".join(listName)))-1
...
>>> vowelCounter(["terrapin","station","13points"])
8
>>> vowelCounter(["terrapin","station","13pOInts"])
8