有人可以向我解释这段代码吗?我真的不明白。
为什么我需要声明uniMessage = ""
这里有什么用途?有时当我编码时,我意识到我需要事先声明它,但有时我不需要。
为什么我需要使用+=
并将用户输入的字词转换为str
?不是+=
就像unicode = unicode + str(ord(char))
一样吗?我没有看到+=
的影响,为什么我不能使用=
。如果我认为用户输入的消息已经是一个字符串?为什么我需要再次将其转换为str
?
此外,没有必要将convMessage += chr(int(alphabet))
转换为整数isn'
message = input("Enter a word ")
uniMessage = ""
for char in message:
uniMessage += str(ord(char))
print("Unicode message:", uniMessage)
convMessage = ""
for i in range(0, len(uniMessage)-1, 2):
alphabet = uniMessage[i] + uniMessage[i+1]
convMessage += chr(int(alphabet))
print("Orginal message:", convMessage)
答案 0 :(得分:0)
重要说明
代码不是真正的Unicode编码/解码,因为假设您输入的Unicode字符只有两位小数。如果输入data = sock.recv(1)
作为输入,则可以自己测试,这些字符包含100,101和102个ASCII代码。
(1) def
,因为您是第一次使用它作为赋值运算符的右侧部分。
uniMessage = ""
与“等效”:
uniMessage += str(ord(char))
在Python中,需要在使用之前声明变量,uniMessage = uniMessage + str(ord(char))
运算符首先评估右操作符。
(2) =
只是语法糖,所以是的,您可以使用+=
,但是有些人会说它不那么pythonic和“更难”到阅读;)我建议尽可能使用=
。您必须使用+=
转换为字符串,因为您在使用str
将用户输入转换为数字之前。 ord
(3)是必要的,因为ord
是一个字符串,一个充满数字字符的字符串,但仍然是一个字符串。
答案 1 :(得分:0)
该代码可能打算将字符转换为内部数字表示并返回字符串。但是,对于换行(通常为0x0A = 10dec)以及" c"以下的8位编码字符,失败的代码只是 (0x63 = 99dec)。
除此之外,在Python中,每个字符串都是一个带有UTF-8编码的Unicode字符串。可以使用其他编码(str.encode()
),然而,将产生"字节"