我目前正在解决Python 3.5中的MIT本科问题。 目标是编写一个Python脚本来计算和打印只包含小写字母的字符串中的元音数量而不使用函数包装器甚至函数定义(在赋值中说明,很奇怪?)。
def vowels_count(s):
i=0
counter = 0
while(s[i] != " "):
if s[i] == "a" or s[i] == "e" or s[i] == "i" or s[i] == "o" or s[i] == "u":
counter += 1
i = i + 1
return(counter)
我有两个问题: 1 /第一个,我自己的代码使用while do结构遇到了使用从第一个字符导航到最后一个字符的索引的问题。调试器说:索引超出范围 2 /最后,如果我必须遵守MIT指令,在没有定义函数的情况下,我将无法在单行代码中执行任何操作。
感谢您的支持
为什么这个版本在字符串索引i上不正确?
def vowels_count_1(s):
i = 0
counter = 0
while(s[i] != ""):
if s[i] == "a" or s[i] == "e" or s[i] == "i" or s[i] == "o" or s[i] == "u":
counter += 1
i += 1
print("Number of vowels: " + str(counter))
答案 0 :(得分:6)
您可以使用i
小于字符串长度的条件来摆脱while循环。我还建议更简单的方法来检查s[i]
处的字母是否在由元音组成的字符串中:
def vowels_count(s):
i = 0
counter = 0
while i < len(s):
if s[i] in 'aeiou':
counter += 1
i += 1
return counter
如果您想在一行中执行此操作,则可以使用列表推导的长度:
counter = len([c for c in s if c in 'aeiou'])
答案 1 :(得分:1)
随着您越来越多地学习,您将能够使用sum
和生成表达式计算一行中的元音。
你可以修复你的循环while i < len(s)
,即直到字符串的长度,但更好的是迭代在我们称之为“字符串”的字符序列上。
for ch in s:
if ch == 'a' or ...
不需要索引。否i
。
如果您已经学习了in
运算符,则可以简化测试。
没有功能可能意味着:
s = "the string"
# your code here
print("vowel count:", counter)
但我不确定......
答案 2 :(得分:0)
这是一个单行解决方案:
reduce(lambda t, c : (t + 1) if c in 'aeiou' else t, s.lower(), 0)