
Pythonのwhileループを使って99表を出力してみた!
こんにちは!エンジニアを目指して必死にプログラミングを勉強中のVictoriaです。
Pythonを一週間に勉強したが、誰がこれが簡単だと言ったの???
まず最初に言っておきますが、このブログは自分がPythonのwhileループについての理解を深めるために書いたものです。
興味のある方はどうぞ下にお進みください。途中で「何を書いてるんだ」と思ったら、バツボタンをお願いします。
完成コード
2 i = 1
3 while i <= 9:
4 j = 1
5 while j <= i:
6 print(f"{i}*{j} = {i*j}",end=" ")
7 if i == j:
8 print("\n")
9 j +=1
10 i += 1
出力結果

1分前まではプログラミングに才能がない自分に悩んでいましたが、この結果が出た瞬間に、「自分がとても牛逼です。」と自慢しました。
(*牛逼=素晴らしい、すっげー。やや下品な中国語の言い方です。)
whileループに対する私の理解
まず、whileループというものは、入れ子にすることができます。 入れ子のパターンは、最も内側のループを先に完了させてから、外側のループを実行します。
1×1から1×9、2×1から2×9、…… 最後に9×1から9×9というのは、実際には二つのループの入れ子です。
1×1=1を二つの変数:iとjで置き換えると、i × jになります。
このとき、1×1から1×9は、iの値を1に固定し、jが1から9までループすることと理解できます。この時、内側のループが終了します。
そして、外側の二回目のループが始まり、2×1から2×9が得られます。これを繰り返します。
外側は合計で9回ループし、外側の各ループごとに内側が9回ループします。
i = 1のとき、jは1から9までループし、その後i=2になり、jが再び1から9までループします。外側のループが終了するまで続きます。
最初に書いたコードと出力結果
最初のコード
実は、最初はforループを使って書いていましたが、このブログはwhileについて書いているので、ここには載せません。ただし、whileループも一度で書けたわけではありません。最初のコードはこんな感じでした。
i = 1
while i <= 9:
j = 1
while j <= 9:
print(f"{i}*{j} = {i*j}")
j += 1
i += 1
出力結果
出力結果は(長すぎるので、少しだけ抜粋しますが、あなたのような賢い方なら具体的にどんなものか想像できるでしょう。また、forループのコードの出力も同じ内容です。)

その後、あるイケメンにツッコまれました。21行目を改善できると。そうしないと、3×2=6や2×3=6などの重複した結果が出てしまいます。
そこで私は悩み、頭をひねってもwhile i <= jに変更できるとは思いつきませんでした(イケメンが親切に教えてくれました❤)。
完成したコードの解読
では、正しい答えが得られたので、正しいコードがどのように動作するのか理解してみましょう。 完成したのコードに戻ります。
2 i = 1
3 while i <= 9:
4 j = 1
5 while j <= i:
6 print(f"{i}*{j} = {i*j}",end=" ")
7 if i == j:
8 print("\n")
9 j +=1
10 i += 1
変数iには初期値が必要で、その値は1です。 1から始まり、iが9以下の間はループを実行します—3行目のコードです。 この時、i=1です。 このループ内では、もう一つの変数jも初期値が必要で、その値は1です。
ここから内側のループが始まります—5行目のコード:jがi以下の時、 i×j=積を出力し、空白で終わります。 (ここで、iとjの値が等しい時に改行する条件を追加しました。)
その後、jの値を1増やして内側のループを続けます。 この時、9行目のコードが実行された後は5行目に戻るべきですが、jの値が1増えて2になったため、内側のループの判断条件を満たさず、内側のループを抜けて10行目のコードを実行します—iの値が1増えます。(つまり、1×1=1は1行だけです)
そして、プログラムは3行目のコードに戻り、iの値は2になり、<=9の条件を満たすため、内側のループを再開します。 4行目のコードを実行し、jはまだ1です。(この時jは2です)
次に5行目で、jとiの値を比較し、条件を満たすので、 6行目を実行し、出力結果は2×1=2で、空白で終わります。 (内側のループの判断条件では、jとiの値が等しくないため、改行しません)
9行目を実行し、jの値を1増やします。この時j=2です。 5行目のj<=iの判断条件を満たし、内側のループを続行します。 2回目の内側のループが終了したら、10行目のコードを実行し、iの値を再び増やします。 この時i=3です。
このように進めていくと、最終的には階段のような形の99の掛け算表が出力されます。
終わりに
勉強にはアウトプットが大事と言われていますので、1週間後に上記の内容を忘れないことを願っています。
以上の内容に誤解や説明の間違いがあれば、下記にてぜひご指摘ください。
エンジニアを目指して必死にプログラミングを勉強中のVictoriaでした!