强盗';python错误中的s语言

强盗';python错误中的s语言,python,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”) 当我试图通过将robber(“asdf”)传递到函数中来运行它时,会得到一个空行和“进程已完成,退出代码为

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

当我试图通过将robber(“asdf”)传递到函数中来运行它时,会得到一个空行和“进程已完成,退出代码为0”


我怀疑可能有多个错误,但程序在语法上是正确的。你能帮我一下吗?

你应该附加到
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
以及:


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

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.join([c,'o',c])
行上,您实际上每次都在替换
s
的内容。我想你想做的是将它附加到
s
,所以我会使用
s+=“”。join([c,'o',c])

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

因此,正如我所说,正确的做法应该是:

s += "".join([c, 'o', c])
免责声明:未测试

代码可读性 正如您所说的,您是一名初学者,让我给您一些关于您的编码风格的提示(Python的编码风格非常独特)

1. 您可以执行以下操作,而不是执行
x=='a'或x=='e'或x=='i'或x=='o'或x=='u'

`if x in 'aeiou':`
更容易理解,阅读效果更好

2. 做: 如果…: 返回真值 其他的 返回错误

他很笨拙。尝试:

return ...
就你而言:

return x in 'aeiuo'

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

这种行为是正确的。您似乎期望打印输出。为什么?下面是如何在Python中执行元音检查:
def vowel(x):在“aouie”中返回x
可疑行:
s=s.join([c,'o',c])
@DYZ如果您确实希望它作为函数,您也可以使用元音='aeiou'。.\u包含.\u@StefanPochmann我不建议任何人使用以双下划线开头和结尾的符号。@schwobaseggle:我想我们同时看到了错误。
'o'。join([c,c]))
更短:-)
c+'o'+c
更高效。更高效的是预先创建列表理解,而不是将生成器传递给
join
不要忘记大写字母
def元音(x):返回x.lower()(不是针对这种情况,而是因为作者是一个初学者——列表理解对于新手来说有点复杂)@也许是YotamSalmon,但当您习惯了它时,用listcomp重写一个不可靠的代码要比试图理解流控制为什么会被破坏更快。我也有过调试初学者代码的经验。现在我试着展示应该如何做。
`if x in 'aeiou':`
return ...
return x in 'aeiuo'