抢劫者的Python语言

2024-04-26 06:56:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我是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”

我怀疑可能有多个错误,但程序的语法是正确的。你能帮我做这个吗?你知道吗


Tags: or函数字符串text语言falsetruereturn
3条回答

首先,你的问题

s=s.join([c,'o',c])行上,实际上每次都在替换s的内容。我想你要做的是把它附加到s,所以我会使用s += "".join([c, 'o', c])

此外,使用join是错误的-连接之前的字符串位于给定列表中每两个元素之间,而不是第一个元素之前。你知道吗

所以,正如我所说,正确的形式应该是:

s += "".join([c, 'o', c])

免责声明:未经测试。你知道吗

代码可读性

正如您所说的您是一个初学者,让我给您一些关于您的编码风格的提示(Python的编码风格非常独特)。你知道吗

1个

您不必执行x=='a' or x=='e' or x=='i' or x=='o' or x=='u',而是执行以下操作:

`if x in 'aeiou':`

更容易理解和阅读。你知道吗

正在执行: 如果…: 返回True 其他的 返回False

他很笨拙。尝试:

return ...

对你来说:

return x in 'aeiuo'

条件已经是布尔值(TrueFalse)-无需重新计算;)

如果要避免所有这些追加/覆盖错误(并获得更好的性能/避免字符串串联),最好开始使用列表理解编写这些错误:

text = "asdf"

new_text = "".join([c if c in "aeiou" else "{0}o{0}".format(c) for c in text])

print(new_text)

结果:

asosdodfof

新文本是一个使用三元表达式构建的列表理解的连接列表(创建一个字符串):如果是元音,则不要使用字母,否则创建模式。你知道吗

如果s不是元音,则应将s附加在^{上,而不是将c附加在^{

def robber(text):
    s=""
    for i,c in enumerate(text):
        if vowel(c)==False:
            s += ''.join([c,'o',c])
        else:s += c
    return s

此外,还有一些补充意见:

  • 使用not而不是== False更具脓性
  • 您不需要使用enumerate(..),因为i从未使用过
  • 如果测试成功/失败,您不需要return Truereturn False,只需返回条件即可;并且
  • 您可以更优雅地重写vowel(..)robber(..)函数。你知道吗

所以把它放在一起:

def vowel(x):
    return x.lower() in ('a','e','i','o','u')

以及:

def robber(text):
    return ''.join([c if vowel(c) else ''.join((c,'o',c)) for c in text])

相关问题 更多 >