【问题标题】:Ascii decoding function in Python, what's wrong?Python中的ascii解码函数,有什么问题?
【发布时间】:2017-03-12 10:50:43
【问题描述】:

我有这个函数可以通过给定的键解码一个字母

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

我不明白为什么decode_char 中的ord(n) 没有收到字符?

我已将单词拆分为列表?并将这些压缩到密钥的数字?

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

有人吗?

【问题讨论】:

  • “它不起作用”到底是什么意思?代码的预期输出和描述在这里会有很大帮助。编辑:并避免在以后的问题中说“它不起作用”;)
  • @GerryHernandez 以上编辑
  • 如果您正在寻找:Caesar Cipher
  • @Bhansa 这是我的一项任务,所有内容都必须从头开始,不允许使用某些功能,例如密码等。
  • 抱歉,但您需要了解如何使用 code_block 和键一起工作。尝试不同的场景,使用示例。

标签: python python-3.x encryption ascii


【解决方案1】:

问题在于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 也是如此。

【讨论】:

    【解决方案2】:
    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!!
    

    【讨论】:

    • 虽然您的代码比 OP 更简单,但您的编码/解码过程与 OP 正在执行的操作有很大不同。他们的算法仅将字母映射到相同大小写的字母,而其他字符保持不变。
    • 嗯,我对他的编码算法有疑问。我会更新的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-02
    • 1970-01-01
    • 1970-01-01
    • 2013-09-22
    相关资源
    最近更新 更多