我制作了一个Python'强盗语言'翻译程序,这是正确的吗?

Alt*_*oub 1 python

所以我只是python中的菜鸟,我正在做这个练习:

"写一个函数translate(),将一个文本翻译成"rövarspråket"(瑞典语为"强盗的语言").也就是说,每个辅音加倍并在其间放置"o".例如,翻译("这是有趣的")应该返回字符串"tothohisos isos fofunon"."

我能够做到这里是我的代码:

def translate (var1):
    vaw = ['b','c','d','f','g','h','j','k','l','m','n','p','q','r','s','t','v','w','x','z']
    var1 = list(var1)
    for string  in var1:
        if string == string in vaw:
           var1[var1.index(string)] = string + 'o' + string
    print ''.join(var1)
Run Code Online (Sandbox Code Playgroud)

我想知道这是否正确,或者是否有另一种方法可以用更少的代码来做到这一点?

NPE*_*NPE 9

def translate(s):
  consonants = 'bcdfghjklmnpqrstvwxz'
  return ''.join(l + 'o' + l if l in consonants else l for l in s)

print(translate("this is fun"))
Run Code Online (Sandbox Code Playgroud)

  • @JoranBeasley:你真的在乎它是否更慢?而且,如果你_do_,你为什么不经测试就假设?对于这个微小的字符串,根据'%timeit`,这个版本需要4.72us而正则表达式为28.1us(这甚至计算额外函数调用的成本).并且采用128K HTML文档,`%timeit`表示这个是28.3ms而对于`re`是125ms.所以,它比正则表达式快5倍. (2认同)

Jor*_*ley 5

正则表达式是一个很好的解决方案

>>> import re
>>> print re.sub(r"([bcdfghjklmnpqrstvwxyz])",r"\1o\1","this is fun")
tothohisos isos fofunon
Run Code Online (Sandbox Code Playgroud)