11.1 三項演算子
Pythonにはいわゆる三項演算子があって、基本的には改良された演算子 if
else
のようなものなんだ。
例えばこういったコードがあるとして:
if a < b:
min = a
else:
min = b
こんな簡単なコードも、もっとコンパクトに書けるんだ。こんな感じでね:
min = a if a < b else b
三項演算子の一般的な形はこんな感じかな:
変数 = 値1 if 条件 else 値2
条件が真なら変数に 値1が代入されて、偽なら 値2が代入されるんだ。
条件の後にコロンをつけないことに注意してね。
11.2 ループ内のelse
Pythonでは、else
はよく条件文のif
と一緒に使われるけど、 実はそれだけじゃなくて、for
やwhile
ループでも使えるんだ。
ループ内のelse
は最初はちょっと変に思えるかもしれないけど、 実はプログラムの流れをうまく管理するのに役立つんだ。
ループでのelse
の動作
else
は、ループが通常通りに終了したとき(つまり、break
で中断されなかった場合)に実行されるんだ。これは、ループが途中で中断されたかどうかを確認するのに役立つよ。
基本的なループの for
の実例:
for i in range(3):
password = input('パスワードを入力してください: ')
if password == '秘密':
print('パスワードが受け付けられました。')
break
else:
print('試行回数がないか、すべてのパスワードが間違っています。')
ここでは、ユーザーが3回間違ったパスワードを入力したときにelse
が実行されるんだ。もしユーザーが正しいパスワードを入力したら、ループはbreak
で中断されて、else
ブロックは実行されないんだ。
基本的なループの while
の実例:
n = 5
while n > 0:
print(n)
n -= 1
else:
print('ループは正常に終了しました。')
この場合、条件が偽になったため、ループが自然に終了した後にelse
が実行されるよ。
実用的な意味
ループ内でelse
を使うのは、特に検索アルゴリズムで有用だよ。たとえば、リストの中にない要素を探すとき、ループが終わった後に失敗メッセージを出力するためにelse
を使えるんだ。
else
をループで使うときは、読んでいる人が混乱しないように、明確で一貫性のある方法で使ってね。else
がいつも直感的に理解できるわけじゃないから、コメントを追加したり、他の方法で論理を実装したりして、コードをわかりやすくすることも考えてね。
11.3 ネストされたループ
Pythonでは、非常に複雑なロジックをすごくコンパクトに書くことができるんだ。ある場合には、ネストされたifが必要で、またある場合にはネストされたループが必要なんだ。これから、そこのところをちょっと話してみるね。
ネストされたループというのは、あるループの中に別のループがあることを意味するんだ。これを使うと、多次元配列やリストのリスト、その他の入れ子になったデータ構造を処理できるんだよ。
ネストされたループは、外側のループと1つまたは複数の内側のループから成り立っているんだ。外側のループが1回繰り返されるたびに、内側のループは全部実行されるの:
for i in range(3): # 外側のループ
for j in range(3): # 内側のループ
print(f"({i}, {j})")
外側のループの観点では、内側のループとその内容は、外側のループの各反復ごとに実行されるコマンドブロックに過ぎないんだ。外側のループは、自分の内側に何がいくつ存在しようと、まったくかまわないんだ。自分のリストの変数のたびに内部のコマンドブロックを実行するだけなんだ。
じゃあ、掛け算の表
を画面に出してみようか。ネストされたループはこのタスクにぴったりだね。掛け算の表を作るには、1つのループが掛ける数を、もう1つが掛けられる数を管理するようなネストされたループを使うんだ:
n = 5
for i in range(1, n + 1):
for j in range(1, n + 1):
print(f"{i} * {j} = {i * j}", end='\t')
print() # 次の掛ける数へ移行するために新しい行に移動
この例では、画面に掛け算の表が出力されるよ:
1 * 1 = 1 1 * 2 = 2 1 * 3 = 3 1 * 4 = 4 1 * 5 = 5
2 * 1 = 2 2 * 2 = 4 2 * 3 = 6 2 * 4 = 8 2 * 5 = 10
3 * 1 = 3 3 * 2 = 6 3 * 3 = 9 3 * 4 = 12 3 * 5 = 15
4 * 1 = 4 4 * 2 = 8 4 * 3 = 12 4 * 4 = 16 4 * 5 = 20
5 * 1 = 5 5 * 2 = 10 5 * 3 = 15 5 * 4 = 20 5 * 5 = 25
ネストされたループをよく理解するためには、ひたすら実践するのが一番だよ。プログラミングで何かを習得する最速の方法は、やっぱりやってみることなんだ。
GO TO FULL VERSION