2017-03-14 15 views
1

lambdaを使用して暗号化/復号化する必要があり、問題があります。私の関数create_rot13()は引数を受け取ってはいけません。私のラムダだけが引数を受け取ります。ラムダを使ってrot13で暗号化/復号化する?

これまでの私の現在のコードは、lambdaを使用していないため、私は見つけられませんでした。そのようなコード行を挿入する方法。

def create_rot13(message): 
    crypted = "" 
    letters = "abcdefghijklmnopqrstuvwxyz" 

    for car in message: 
     if car in letters: 
      num = letters.find(car) 
      num = num + 13 
      if num >= len(letters): 
       num = num - len(letters) 
      crypted = crypted + letters[num] 
    else: 
     crypted = crypted + car 

    crypted = crypted[:-1] 
    return crypted 

print(create_rot13("jbeyq")) 
print(create_rot13("world")) 

誰もが私の問題の解決策を見つけるのに役立つヒントや何かを持っていますか?

それはこの1つの変更を除いて、ソートのようなだけの数になります。また、あなたがラムダでそれをしたい場合は、あなたがラムダでletters変数をキャプチャする必要が

def create_rot13(): 
my_fonction = lambda x : x + 13 
return my_fonction 

coding = create_rot13() 
print(coding(4)) 
+0

:ここ

import codecs rot13 = lambda s: codecs.encode(s, 'rot13') 

は、いくつかのサンプルの使用方法は? Pythonのlambdaは、他の関数の引数として関数を渡しているときにのみ有効です(そうでなければ、ネストした 'def'を使うことができます)。なぜ、ファクトリファクトリを書く必要があるのか​​も分かりません。工場から返された関数が毎回異なっていても、ROT13はROT13であれば意味があります。 – Blckknght

+0

それは宿題のためのもので、私たちはそれをやっていかなければならないのですか、そうでなければ私は確かに別の方法でそれをやります。ちょっと、私は完全な解決策の代わりに解決策を見つけるためにヒントを求めます。私は他の暗号化方法にもこのコードを(いくつかの変更を加えて)使用しています – MaxyArthes

答えて

0

(ab)がcodecs module(およびラムダ)を使用する単純な例です。テキスト - >テキストエンコーディングをしているときに、.encode('rot13')への通常の呼び出しの代わりに、ここでコーデックモジュールが必要であることに注意してください。このため、ラムダが必要なのはなぜ

>>> rot13('foo') 
'sbb' 
0

をし、 mapを使用してください。

def encode_rot13(message): 
    offset = ord('a') 
    result = map(lambda c: chr((ord(c) + 13 - offset) % 26 + offset), message) 
    return "".join(result) 

私は、我々はすべての文字と文字列の周りに維持する必要はありませんchrordを使用する:あなたはこのような何かをしたいです。ここでの考え方は、任意の文字のコードポイントを表す整数を取得しているため、findの代わりに数式を使用できます。