ord()期望出现字符错误

时间:2014-11-27 00:52:50

标签: python unicode

我正在编写一个程序,对用户选择的文本进行编码和解码。当我输入unicode代码返回字符但我的编码器功能不起作用时,我的解码器功能似乎工作正常。

简单地说,我想要完成的是:

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

    这是我的代码。

    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()
    

    非常感谢!

2 个答案:

答案 0 :(得分:2)

主要问题是你必须分别编码字符串的每个字符。 ord函数只能使用单个字符,而不是:

encoded = encode(text)

你想要:

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

此外(这与您获得的错误无关),您忘记了操作顺序。你把code * 4 + 10 // 2代替了。{ (code * 4 + 10) // 2,因此代码实际上等同于code * 4 + 5。你做了类似的解码。

答案 1 :(得分:1)

您需要对字符串的每个字符使用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