我有这个函数用给定的键解码一个字母
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
没有收到字符?
我把这个词分成了一个列表?并将这些压缩到键的数字?
只是学生所以请不要去火腿
任何?
答案 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)
我不明白为什么你有encrypt
和code_block
。您可以删除encrypt
并将code_block
重命名为encrypt
。 decrypt
/ 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!!