我正在编写一个程序,用于编码和解码用户选择的文本。当我向它输入 unicode 代码以返回字符时,我的解码器函数似乎工作正常,但我的编码器函数不起作用。
简而言之,我要完成的是:
- 询问用户是否要编码或解码
- 如果他们想要编码,我想收集一串短语,直到用户输入"完成",将它们附加到列表中,然后使用我的编码函数对它们进行编码,最后打印出编码列表。
- 如果他们想要解码,我想收集一系列实际上是 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