ord() 预期出现字符错误



我正在编写一个程序,用于编码和解码用户选择的文本。当我向它输入 unicode 代码以返回字符时,我的解码器函数似乎工作正常,但我的编码器函数不起作用。

简而言之,我要完成的是:

  1. 询问用户是否要编码或解码
  2. 如果他们想要编码,我想收集一串短语,直到用户输入"完成",将它们附加到列表中,然后使用我的编码函数对它们进行编码,最后打印出编码列表。
  3. 如果他们想要解码,我想收集一系列实际上是 Unicode 代码的交互器,直到用户输入"完成",将它们附加到 list2,然后使用我的解码函数解码它们并打印出解码列表。

这是我的代码。

def encode(character):
    code = ord(character)
    new_code = code * 4 + 10 // 2
    return new_code
def decode(character):
    code2 = character * 2 - 10 // 4
    new_code2 = chr(code2)
    return new_code2
def main():
    encoded_list = []
    decoded_list = []
    choice = input('Hello! Do you want to encode or decode? ').lower()
    if choice == 'encode':
        text = input('Enter text to encode or "done": ')
        while text != 'done':
            encoded = encode(text)
            encoded_list.append(encoded)
            text = input('Enter text to encode or "done": ')
        if text == 'done':
            print(encoded_list)
    elif choice == 'decode':
        text2 = input('Enter characters to decode or "done": ')
        while text2 != 'done':
            text2 = int(text2)
            decoded = decode(text2)
            decoded_list.append(decoded)
            text2 = input('Enter characters to decode or "done": ')
        if text2 == 'done':
            print(decoded_list)
    else:
        print('Please enter a valid response')
main()

非常感谢!

主要问题是您必须单独对字符串的每个字符进行编码。ord函数只能接受一个字符,因此代替:

encoded = encode(text)

你想要:

encoded = ""
for char in text:
    encoded += encode(text)

另外(这与你得到的错误无关),你忘了考虑操作顺序。你放code * 4 + 10 // 2而不是 (code * 4 + 10) // 2,所以代码真的等同于code * 4 + 5。你为解码做了类似的事情。

您需要对字符串的每个字符使用 ord,而不是一次使用整个字符串:

def encode(character):
    code = map(ord,character)
    new_code = [(x * 4 + 10) // 2 for x in code]
    return new_code
def decode(character):
    code2 = [(x * 2 - 10) // 4 for x in character]
    new_code2 = "".join([chr(x) for x in code2])
    return new_code2

最新更新