再帰を使ってグレイコードを生成するPythonプログラムの書き方
グレイコード(Gray Code)とは、隣り合う数値同士でビットが必ず1つだけしか変化しない特別な二進数表記のことです。デジタル回路設計やエラー検出、位置センサーなど、さまざまな分野で活用されています。
Pythonで再帰的な考え方を利用してグレイコードを生成するには、まず空のリストを作成し、初期値として「0」と「1」を追加するメソッドを定義します。その後、関数内で複数の「for」ループを組み合わせることで、指定した桁数分のグレイコードを効率よく生成できます。
サンプルコード
import math as mt
def generate_gray_list(my_val):
if (my_val <= 0):
return
my_list = list()
my_list.append("0")
my_list.append("1")
i = 2
j = 0
while(True):
if i >= 1 << my_val:
break
for j in range(i - 1, -1, -1):
my_list.append(my_list[j])
for j in range(i):
my_list[j] = "0" + my_list[j]
for j in range(i, 2 * i):
my_list[j] = "1" + my_list[j]
i = i << 1
for i in range(len(my_list)):
print(my_list[i])
my_num = 3
print("The number is :")
print(my_num)
print("Method to convert gray code to binary is being called...")
generate_gray_list(my_num)出力結果
The number is : 3 Method to convert gray code to binary is being called... 000 001 011 010 110 111 101 100
処理の流れと解説
まず、必要なパッケージをインポートします。
空のリストを作成するメソッド
generate_gray_listを定義します。引数が0以下の場合は何もせずに終了します。作成したリストに対して、初期値である「0」と「1」を追加します。
複数の「for」ループを使い、既存の要素を逆順にコピーしながら反復処理を行います。これにより、鏡像となるパターンが生成されます。
前半の要素には先頭に「0」を、後半の要素には先頭に「1」を付加することで、新しい桁のグレイコードを作り出します。
イテレータに対して左シフト演算子(
<<)を適用し、その結果を目標のビット数と比較することで、whileループの継続条件を判定しています。メソッドの外部からは、生成したいビット数(ここでは3)を引数として渡して呼び出します。
最終的に、生成されたすべてのグレイコードがコンソールに出力されます。
このように、リストの鏡像コピーとプレフィックス(接頭辞)の付加を繰り返すシンプルな手法により、任意のビット数のグレイコードを短いコードで生成することが可能です。
-
PythonのpyqrcodeモジュールでQRコードを生成する方法
QRコードは、白い背景の上に黒い四角形を格子状に配置した2次元コードで、カメラなどの画像読み取り装置によって読み取ることができます。商業用途での在庫追跡や決済、ウェブサイトへのログインなど、スマートフォンユーザー向けのさまざまなアプリケーションで広く利用されています。Pythonではpyqrcodeモジュールを使うことで、簡単にQRコードを生成できます。QRコードには、データを効率的に格納するための4つの標準エンコードモード(数値モード、英数字モード、バイト/バイナリモード、漢字モード)が用意されています。英数字のQRコードを生成するpyqrcodeモジュールには、QRコードを生成するためのc
-
PythonでGETメソッドを使用して情報を渡す方法【CGIプログラミング入門】
GETメソッドとはGETメソッドは、エンコードされたユーザー情報をページリクエストに付加して送信する方式です。ページのURLとエンコードされた情報は「?」記号で区切られます。https://www.test.com/cgi-bin/hello.py?key1=value1&key2=value2GETメソッドは、ブラウザからWebサーバーへ情報を渡す際のデフォルトの方法であり、送信した内容はブラウザのアドレスバー(Locationボックス)に長い文字列として表示されます。そのため、パスワードなどの機密情報をサーバーに送る場合には、GETメソッドは絶対に使用しないでください。また、GET