2017-03-12 8 views
1

私はそう言葉をPythonでのAsciiのデコード機能、何が問題なのですか?

def decode_block(word,key): 
    letters = list(word) 
    keys = list(key) 
    decoded = [] 
    for letter, digit in zip(letters, keys): 
     decoded.append(decode_char(letter, digit)) 
    return "".join(decoded) 

I入力この

print(decode_char('bddffhhj', '12121212')) 
をデコードされ、仕事にこれを取得しようとしています与えられたキー

def decode_char(n, key): 
    adj = ord('a') if n.islower() else ord('A') 
    return chr(adj + (ord(n)-adj-int(key))%26) 

で文字を解読し、この機能を持っています

このエラーメッセージが表示されます

TypeError: ord() expected a character, but string of length 8 found 

私はdecode_charord(n)が文字をrecieveingされていない理由を私は理解することはできません

abcdefgh 

を取得する必要がありますか?

単語をリストに分割しましたか?これを鍵の数字に圧縮したのでしょうか?

ただ、学生はとてもハム

誰でも行くしないでください?

+0

意味を正確に何をして "それは動作しません" ん?コードが何をしているかについての予想される出力と説明は、ここでは大いに役立ちます。編集:そして、それは "それは動作しません"将来の質問で言うことを避けてください) –

+1

@ GerryHernandez上に編集 –

+0

あなたが探しているIncase:[Caesar Cipher](http://stackoverflow.com/questions/8886947/caesar-cipher-関数内のPython) – bhansa

答えて

0

問題はdecode_charです。追加する代わりにkey整数を減算する以外は、code_charとほとんど同じです。ここに修理されたバージョンがあります。

def decode_char(n, key): 
    adj = ord('a') if n.islower() else ord('A') 
    return chr(adj + (ord(n)-adj-int(key))%26) 

あなたはencryptcode_blockを持っている理由私は理解していません。あなたはencryptを取り除き、code_blockencryptに改名することができます。 decrypt/decode_blockについても同様です。

0
def code_char(c, key): 
    return chr(ord(c)+key%26) 
code_char('a',3) 

def decode_char(c,key): 
    return chr(ord(c)-key%26) 
decode_char('d',3) 

サンプル例

txt = "This is a secret message!!" 

#encoding 
lista = [] 
for i in txt: 
    lista.append(code_char(i,3)) 
print ''.join(lista) 

encoded = ''.join(lista) 

lista = [] 
#decoding 
for i in encoded: 
    lista.append(decode_char(i,3)) 
print ''.join(lista) 

decoded = ''.join(lista) 

出力

Wklv#lv#d#vhfuhw#phvvdjh$$ 
This is a secret message!! 
+0

あなたのコードはOPのものより簡単ですが、エンコード/デコードのプロセスは、OPのやり方とはかなり異なります。それらのアルゴリズムは、同じケースの文字にのみ文字をマッピングし、他の文字は変更しません。 –

+0

ええと、彼のエンコーディングアルゴリズムに疑問があります。私は更新します。 – bhansa

関連する問題