我是Python的初学者。你知道吗
我有一个函数检查它是否是元音。你知道吗
def vowel(x):
if(x=='a' or x=='e' or x=='i' or x=='o' or x=='u'):
return True;
else:
return False;
还有一个函数,它试图通过使用上面的元音函数将字符串转换成强盗的语言。(转换的算法是将每个辅音加倍,中间加一个“o”)。你知道吗
def robber(text):
s=""
for i,c in enumerate(text):
if vowel(c)==False:
s=s.join([c,'o',c])
return s;
当我试图通过将robert(“asdf”)传递到函数中来运行它时,我得到一个空行和“processfinished with exit code 0”
我怀疑可能有多个错误,但程序的语法是正确的。你能帮我做这个吗?你知道吗
首先,你的问题
在
s=s.join([c,'o',c])
行上,实际上每次都在替换s
的内容。我想你要做的是把它附加到s
,所以我会使用s += "".join([c, 'o', c])
此外,使用
join
是错误的-连接之前的字符串位于给定列表中每两个元素之间,而不是第一个元素之前。你知道吗所以,正如我所说,正确的形式应该是:
免责声明:未经测试。你知道吗
代码可读性
正如您所说的您是一个初学者,让我给您一些关于您的编码风格的提示(Python的编码风格非常独特)。你知道吗
1个
您不必执行
x=='a' or x=='e' or x=='i' or x=='o' or x=='u'
,而是执行以下操作:更容易理解和阅读。你知道吗
二
正在执行: 如果…: 返回True 其他的 返回False
他很笨拙。尝试:
对你来说:
条件已经是布尔值(
True
或False
)-无需重新计算;)如果要避免所有这些追加/覆盖错误(并获得更好的性能/避免字符串串联),最好开始使用列表理解编写这些错误:
结果:
新文本是一个使用三元表达式构建的列表理解的连接列表(创建一个字符串):如果是元音,则不要使用字母,否则创建模式。你知道吗
如果
s
不是元音,则应将s
附加在^{上,而不是将c
附加在^{上此外,还有一些补充意见:
not
而不是== False
更具脓性enumerate(..)
,因为i
从未使用过return True
和return False
,只需返回条件即可;并且vowel(..)
和robber(..)
函数。你知道吗所以把它放在一起:
以及:
相关问题 更多 >
编程相关推荐