Python Challenge(1)

PythonChallenge始めてみる。
問0は単純な計算なので問1から。

まず思いつくのは単純にord()で文字コードを求めて2を足す。3.0.1で実行。

def convert(str):
    return "".join([chr(ord(s)+2) if ord('a') <= ord(s) <= ord('x') else (chr(ord(s)+1-(ord('z')-ord('a'))) if s in ['y','z'] else s) for s in str])

if __name__ == "__main__":
    print(convert("""g fmnc wms bgblr rpylqjyrc gr zw fylb. 
rfyrq ufyr amknsrcpq ypc dmp. bmgle gr gl zw fylb gq glcddgagclr ylb rfyr'q ufw rfgq rcvr gq qm jmle. 
sqgle qrpgle.kyicrpylq() gq pcamkkclbcb. lmu ynnjw ml rfc spj. """))

yとzのせいで冗長だ。
「string.maketrans() is recommended.」とのことなので修正。
ただしstring.maketrans()は3.0から仕様が変更されたのでstr.maketrans()を使用。
それとstring.lowercaseも廃止されてたのでstring.ascii_lowercaseを使用。

def convert2(str):
    from string import ascii_lowercase
    table = str.maketrans(ascii_lowercase, ascii_lowercase[2:] + ascii_lowercase[:2])
    return str.translate(table)

URLのファイル名部分を変換して〆