【问题标题】:encrypt an 8 letter word python, what's wrong?加密一个 8 个字母的单词 python,怎么了?
【发布时间】:2017-03-11 15:27:22
【问题描述】:
def code_char(c, key):
    return chr(ord(c)+int(key))

def code_block(word,key):
    letters = list(word)
    keys = list(key)
    for letter in letters:
        for digit in keys:
            coded = code_char(letter, digit)
    return coded

print(code_block('abcdefgh', '12121212'))

我正在尝试使用 Ascii 表等加密代码块输入。

无法让它工作!怎么了?

得到错误:

TypeError: ord() 预期长度为 1 的字符串,但找到了 int

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

有人吗?

【问题讨论】:

  • 啊,我明白了,但我尝试使用列表函数将其拆分,不是吗?
  • 是的,对不起,我看错了。现在回答。

标签: python python-3.x ascii


【解决方案1】:

我无法重现您的错误,对我来说,您的代码打印为 j

问题是您将“加密”字符分配给coded,因此覆盖了之前的“加密”字符。解决此问题的一种方法是将coded 设为列表:

def code_block(word,key):
    letters = list(word)
    keys = list(key)
    coded = []
    for letter, digit in zip(letters, keys):
        coded.append(code_char(letter, digit))
    return "".join(coded)

【讨论】:

  • 非常感谢你的帮助,但是,我最终得到了 bcbcbcbccdcdcdcddedededeefefefeffgfgfgfgghghghghhihihihiijijijijj 作为输出,我期待 'bddffhhj'
  • 啊,对了,剩下的代码我没看。发生这种情况是因为对于每个字母,当您真的想成对查看它们时,您迭代了每个数字。为此,您应该使用zip,如我编辑的答案所示。
  • 非常感谢!很高兴摆脱错误消息。我从未使用过 zip 功能,但它看起来很方便。再次感谢。
猜你喜欢
  • 2015-08-26
  • 1970-01-01
  • 2014-01-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-26
  • 2014-12-04
相关资源
最近更新 更多