見出し画像

高校向けPython入門(8)実習課題例:文字コード

情報の授業での実習課題例である。「7.1 情報のディジタル化」のその2

7.1.2 文字コード

 情報の教科書には,文字のディジタル化で,ASCII コードとアルファベットの変換をやってみる問題が載っている。これをプログラムしてみよう。まず,文字列とリストの基本的な 処理だけでできるものを考える。

・ASCII コードとアルファベットの対応表をリストにしておく。
・ASCII コードは 16 進数で表す。input で,2 桁の 16 進数を並べたものを文字コード列として入力する。ここから 2 文字ずつ切り出して,対応表を参照してアルファベットにする。文字列を入力してコード化するには,その逆をやればよい。 

 必要な文字列処理とリスト処理はつぎのものだ。

 ・文字列から 2 文字ずつ切り出す
  「スライス」を使う。n 文字目から 2 文字分を取り出すには [n:n+2] とする。
  ・リストから要素を探し出す
  index を使う。このとき,対象の要素があることを,その要素が含まれる
  ことをin 演算子で確かめる。

 ちょっと実験してみよう。

画像1

 あとは,alpha と code を増やせばいいのだが,全部打ち込むのは面倒だ。
実は,文字を与えてコードを返す関数,その逆の関数が組み込み関数として用意されている。
 ・ord(文字) :引数の文字のコードを 10 進数で返す。
 ・chr(数):引数の数に対応する文字を返す。引数は 10 進数。
16 進数で扱いたいので,10 進数と 16 進数の相互変換に int() ,hex() も使おう。 まず,これらの関数の働きを確かめておく。

画像2

これを使うと,先ほどのプログラムは次のように書ける。

s = input('ASCIIコード列を入力 ') 
n = len(s)
for i in range(0,n,2):
    ch = s[i:i+2]
    print(chr(int(ch,16)),end = '')

文字から ASCII コードへの変換は次のようになる。

s = input('文字列を入力 ') 
n = len(s)
for i in range(n):
    code = hex(ord(s[i])) # 16進数なので 0x がつく 
    print(code[2:],end = '')

0x がつかず,A~F が大文字になるようにするには,format() を使う。

s = input('文字列を入力 ') 
n = len(s)
for i in range(n):
    code = ord(s[i])
    print(format(code,"02X"),end = '')

コードがわかりやすいように,スペースを入れて表示するなら,end = ' ' と,ここを半角スペースにすればよい。

 実際の授業では,組み込み関数を使うのがよいとは限らない。コードと文字の対応を実感させるには,面倒でもリストを使ったほうがよいだろう。