我正在编写一个程序,对用户选择的文本进行编码和解码。当我输入unicode代码返回字符但我的编码器功能不起作用时,我的解码器功能似乎工作正常。
简单地说,我想要完成的是:
这是我的代码。
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()
非常感谢!
答案 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