2017-08-26 110 views
0

任何人都可以向我解释这段代码吗?我不太明白。将单词转换为Unicode

  1. 为什么我需要声明uniMessage = ""这里有什么用处?有时当我编码时,我意识到我需要事先声明,但有时我不需要。

  2. 为什么我需要使用+=并将用户输入的字转换为str?是不是+=就像unicode = unicode + str(ord(char))?我没有看到+=在这里的影响,为什么我不能只使用=。如果我认为用户输入的消息已经是一个字符串?为什么我需要再次将它转换为str

  3. 另外它没有必要将convMessage += chr(int(alphabet))转换为整数是不是?

    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

重要澄清

的代码是不是一个真正的Unicode编码/解码,因为假设中的Unicode字符,你会输入刚才两位十进制数。如果输入def作为输入,则可以自己测试,这些字符具有100,101和102个ASCII码。

(1)uniMessage = ""需要,因为您第一次使用它作为赋值运算符的右部分。

uniMessage += str(ord(char)) 

是“相当于”:

uniMessage = uniMessage + str(ord(char)) 

和Python中的变量需要声明使用前和=符计算正确的操作性第一。

(2)+=只是语法糖,所以是的,你可以使用=,但有些人会说是少Python化和“难”读;)我建议时,你可以使用+=。您必须使用str转换为字符串,因为您在使用ord将用户输入转换为数字之前。 ord

(3)是必要的,因为uniMessage是一个字符串,字符串全数字字符,但仍然是一个字符串。

+0

为什么我不能编码'uniMessage = str(ord(char))'因为它被声明为没有值?不应该有任何影响不是吗? 'uniMessage + str(ord(char))'中的'uniMessage'似乎不做任何事情? –

+1

你可以为一个字符输入写'uniMessage = str(ord(char))',但是你正在处理的用户输入可能超过1个字符,这就是为什么你把'uniMessage + = str(ord(char ))'在'for'循环中。你需要将每个字符的代码添加到“编码”字符串,就像一个积累,就像一个总和。 –

0

该代码可能打算将字符转换为内部数字表示形式并将其转换回字符串。但对于低于换行符(通常为0x0A = 10dec)和高于“c”(0x63 = 99dec)的8位编码字符,该代码仅为时出现失败。 除此之外,在Python中,每个字符串都是使用UTF-8编码的Unicode字符串。使用其他编码是可能的(str.encode()),但是,将产生“字节”