高校向けPython入門(8)実習課題例:文字コード
情報の授業での実習課題例である。「7.1 情報のディジタル化」のその2
7.1.2 文字コード
情報の教科書には,文字のディジタル化で,ASCII コードとアルファベットの変換をやってみる問題が載っている。これをプログラムしてみよう。まず,文字列とリストの基本的な 処理だけでできるものを考える。
・ASCII コードとアルファベットの対応表をリストにしておく。
・ASCII コードは 16 進数で表す。input で,2 桁の 16 進数を並べたものを文字コード列として入力する。ここから 2 文字ずつ切り出して,対応表を参照してアルファベットにする。文字列を入力してコード化するには,その逆をやればよい。
必要な文字列処理とリスト処理はつぎのものだ。
・文字列から 2 文字ずつ切り出す
「スライス」を使う。n 文字目から 2 文字分を取り出すには [n:n+2] とする。
・リストから要素を探し出す
index を使う。このとき,対象の要素があることを,その要素が含まれる
ことをin 演算子で確かめる。
ちょっと実験してみよう。
あとは,alpha と code を増やせばいいのだが,全部打ち込むのは面倒だ。
実は,文字を与えてコードを返す関数,その逆の関数が組み込み関数として用意されている。
・ord(文字) :引数の文字のコードを 10 進数で返す。
・chr(数):引数の数に対応する文字を返す。引数は 10 進数。
16 進数で扱いたいので,10 進数と 16 進数の相互変換に int() ,hex() も使おう。 まず,これらの関数の働きを確かめておく。
これを使うと,先ほどのプログラムは次のように書ける。
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 = ' ' と,ここを半角スペースにすればよい。
実際の授業では,組み込み関数を使うのがよいとは限らない。コードと文字の対応を実感させるには,面倒でもリストを使ったほうがよいだろう。