本サイトAIZU ONLINE JUDGE ITP1_5_C へはこちらから
目次
問題:チェスボードの描画
以下のような、たてH cm よこ W cm のチェック柄の長方形を描くプログラムを作成して下さい。
#.#.#.#.#.
.#.#.#.#.#
#.#.#.#.#.
.#.#.#.#.#
#.#.#.#.#.
.#.#.#.#.#
上図は、たて 6 cm よこ 10 cm の長方形を表しています。
長方形の左上が “#” となるように描いて下さい。
Input
入力は複数のデータセットから構成されています。各データセットの形式は以下の通りです:
H W
H, W がともに 0 のとき、入力の終わりとします。
Output
各データセットについて、たて H cm よこ W cm の枠を出力して下さい。
各データセットの後に、1つの空行を入れて下さい。
Constraints
- 1 ≤ H ≤ 300
- 1 ≤ W ≤ 300
Sample Input
3 4
5 6
3 3
2 2
1 1
0 0
Sample Output
#.#.
.#.#
#.#.
#.#.#.
.#.#.#
#.#.#.
.#.#.#
#.#.#.
#.#
.#.
#.#
#.
.#
#
解答例
while True:
H, W = map(int, input().split())
if H == 0 and W == 0:
break
for i in range(H):
for j in range(W):
if (i+j) % 2 == 0:
print("#", end="")
else:
print(".", end="")
print()
print()
解説
以下のように解いていきます。
while文を使用し、入力処理を行う
ある条件まで入力を続ける場合はwhile文とif文を組み合わせて、入力処理を行います。
# if文の条件式に当てはまるまでループ処理を続ける
while True:
処理
# この条件式に当てはまる場合、break文でループ処理を終了する
if 条件式:
break
今回は、whileループ内でmap関数でH、Wに2つの整数を設定し、H と W がともに 0の場合にbreak文で処理を終了します。
# 終了条件に当てはまるまで処理を続ける
while True:
# input().split()で複数個の文字列を取得 → int関数に当てはめint型に変換 → H, Wに設定
H, W = map(int, input().split())
# H と W がともに0の場合にbreak文で処理を終了
if H == 0 and W == 0:
break
※サイト内「AIZU ONLINE JUDGE ITP1_1_Cをpythonで解いてみた」の、map関数とはにmap関数の使用方法が書かれておりますのでぜひご覧ください。
“#”と”.”を交互に描画する
今回はfor文を2つ使用します。
内側のfor文”for j in range(W):”で横の描画、外側のfor文”for i in range(H):”でたての描画をする際に、i+jを2で割った余りが0のとき、偶数個目と判断し”#”を描画、それ以外は奇数個目なので”.”を描画します。
※”#”と”.”を交互に描画するイメージです。
while True:
H, W = map(int, input().split())
if H == 0 and W == 0:
break
for i in range(H):
for j in range(W):
if (i+j) % 2 == 0:
# "#"と"."を交互に描画し、偶数個目は"#"を描画
print("#", end="")
else:
# 奇数個目は"."を描画
print(".", end="")
# 横の行の区切るために、空のprint関数を記述
print()
# 各データセットの後に、1つの空行を入れてるため空のprint関数を記述
print()
最後に、もう一度プログラムを確認してみましょう。
# 終了条件に当てはまるまで処理を続ける
while True:
# input().split()で複数個の文字列を取得 → int関数に当てはめint型に変換 → H, Wに設定
H, W = map(int, input().split())
# H と W がともに0の場合にbreak文で処理を終了
if H == 0 and W == 0:
break
for i in range(H):
for j in range(W):
if (i+j) % 2 == 0:
# "#"と"."を交互に描画し、偶数個目は"#"を描画
print("#", end="")
else:
# 奇数個目は"."を描画
print(".", end="")
# 横の行の区切るために、空のprint関数を記述
print()
# 各データセットの後に、1つの空行を入れてるため空のprint関数を記述
print()
コメント