2017-08-26 15 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エンコーディング/デコーディングではありませんあなたは、入力だけで2桁の10進数を持つことになります。 defを入力として入力すると、100,101、および102のASCIIコードがあります。

(1)uniMessage = ""が割り当て担当者の右部分として初めて使用されているために必要です。

uniMessage += str(ord(char)) 

と「同等」である:

uniMessage = uniMessage + str(ord(char)) 

とPythonでの使用前に宣言される変数が必要と=オペレータは、まず右のオペラントを評価します。

(2)+=はそうはい、あなたは=を使用することができますが、一部の人々が読むためにそれが少ないニシキヘビと「難しい」と言うでしょう、ちょうど構文糖である;)私は、ときにすることができ+=を使用することをお勧めします。 ordを使用してユーザー入力を数値に変換する前に、strを使用して文字列に変換する必要があります。 ord

uniMessageは、文字列、数字、文字の完全な文字列が、それでも文字列であるため、(3)が必要です。

+0

なぜ 'uniMessage = str(ord(char)) 'をコーディングできないのですか?何の影響もありませんか? uniMessage + str(ord(char))の 'uniMessage'は何もしていないようですか? –

+1

あなたは 'uniMessage = str(ord(char))'を1文字入力だけ書くことができますが、1文字以上のユーザ入力を処理しているので、 'uniMessage + = str(ord )) ''を実行します。各文字のコードを "エンコードされた"文字列に追加する必要があります。合計のように、累積のようなものです。 –

0

このコードでは、文字を内部数値表現に変換して文字列に戻すことが考えられます。しかし、コードは、改行(通常は0x0A = 10dec)以下の "c"(0x63 = 99dec)以下の8ビットコード化文字ではになりません。 それ以外にも、Pythonではすべての文字列がUTF-8エンコーディングのUnicode文字列です。しかし、他のエンコーディングを使用することは可能ですが(str.encode())、 "bytes"を返すでしょう

関連する問題