2017-08-26 148 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()),但是,將產生「字節」