【Python二次元リスト】IF文と論理積and、論理和orで、「市松模様」のドット絵を作成

この記事を読むことによって、

内包表記の二重ループ

論理演算子のandとorの使い所

上記によってPythonで市松模様のドット絵を描画

の概要を掴めます。

主に、Pythonの二重ループを学習中で、規則的で簡単なドット絵を描きたい方を対象にしています。

題材は、1つおきに色が塗りつぶされている市松模様です。
Excelで完成形を作成致しました。

この図を見ての通り、2で割り切れる行 and 2で割り切れる列の所に色が塗りつぶされています。
また、2で割り切れない行 and 2で割り切れない列の所に色が塗り潰されています。

これをPythonで作って行きます。
まずは、この様な枠線のみを作成致します。

ここでは最初に内包表記を使ってリスト(配列)の全ての要素に「□」で埋めます。
10行10列の□を取り出すには、リストarrayを行ごとに取り出す変数line、lineからドットごとに取り出す変数dotを使った二重ループで、内ループの所で改行することによって、次の行に行く前に改行をしています。

#市松模様の二次元リストを内包表記で作成
array=[['□' for i in range(10)] for j in range(10)]

#ドット絵の取り出し
for line in array:
  for dot in line:
    print(dot,end='')
  print()

実行結果です。

では、これを一つ置きに「■」に置き換えて行きます。

リストは0行0列から始まります。
このリストarrryは1番最初がarray[0][0]、1番最後がarray[9][9]です。
そこで、一つ置きになるように、IF文の中で論理演算子のand と or を使い、
「2で割り切れる行 and 2で割り切れる列」 or
「2で割ると1余る行 and 2で割ると1余る列」を「■」にします。

#市松模様の二次元リストを内包表記で作成
array=[['□' for i in range(10)] for j in range(10)]

#市松模様の1つ置きに■を格納(i,j共に偶数・i,j共に奇数の時に■)
for i in range(len(array)):
  for j in range(len(array[0])):
    if(i%2==0 and j%2==0) or (i%2==1 and j%2==1):
      array[i][j] = '■'

#ドット絵の取り出し
for line in array:
  for dot in line:
    print(dot,end='')
  print()  

実行結果です。

お疲れ様でした。ブレイクタイムPhotoは、

柏市にある、あけぼの山農業公園のひまわりです。

ご精読ありがとうございました。

■ 独習Python ■
Kindle版
単行本(ソフトカバー)

Python自作サンプル集へ戻る

写真クリエイターとしての活動
自己紹介