在Python中用Ascii解码函数,有什么不对?

时间:2017-03-12 10:50:44

标签: python python-3.x encryption ascii

我有这个函数用给定的键解码一个字母

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

我试图让它工作,所以一个词被解码

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)

当我输入

print(decode_char('bddffhhj', '12121212'))

我收到此错误消息

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

我需要

abcdefgh

我无法弄清楚为什么ord(n)中的decode_char没有收到字符?

我把这个词分成了一个列表?并将这些压缩到键的数字?

只是学生所以请不要去火腿

任何?

2 个答案:

答案 0 :(得分:0)

问题在于decode_char。它应该与code_char几乎相同,除了减去key整数而不是添加它。这是修复后的版本。

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_block重命名为encryptdecrypt / decode_block也是如此。

答案 1 :(得分: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!!