Python勉強中で備忘録です。https://utokyo-ipp.github.io/1/1-4.html

⇒少し分かりにくいです。ChatGPTに以下の通り解説させたところ、少し分かりやすくなったが、これの何が問題か、分かりにくい。
def median(x, y, z):
print(x, y, z) # (1) 受け取った引数をそのまま表示
if x > y: # (2) x > y の場合
x = y
y = x # x を y に、y を x にしようとしている
print(x, y, z) # (3) 値を再度表示
if z < x: # (4) z が一番小さい場合
return x
if z < y: # (5) z が中間の場合
return z
return y # (6) それ以外は y を返す

⇒こちらについてChatGPTの解説は以下の通り。こちらの式をよく見て、さっきの式の問題が理解できた。こちらの式では元々のxの値がwとして保存されるのがポイント。yが元々のxの値になるから、x>yの時、xとyの値を交換することになり、xがyより小さい状況になる。
さっきの式では、xがyの値になった後で、yが変化後のxの値になるから、yは元のyの値のままとなり、xとyが同値になってしまう。
1. 最初の引数の並び
pythonコピーする編集するprint(x, y, z)
最初に渡された3つの値を表示します。
例: median(3, 1, 2)
なら → 3 1 2
と出力。
2. x と y の順序を整える
pythonコピーする編集するif x > y:
w = x
x = y
y = w
もし x > y
なら、x
と y
を入れ替えます。
これで 必ず x <= y
になる ようにしています。
例: (3, 1, 2)
の場合 → 入れ替えて (1, 3, 2)
になる。
次の print
で 1 3 2
が出力されます。
3. z の位置を調べる
pythonコピーする編集するif z < x:
return x
もし z < x
なら、x
が中央値です。
理由: 3つの中で z
が一番小さいから。
pythonコピーする編集するif z < y:
return z
もし x <= z < y
なら、z
が中央値です。
pythonコピーする編集するreturn y
上のどちらでもない場合、つまり z >= y
の場合は y
が中央値です。
4. 実行例
pythonコピーする編集するmedian(3, 1, 2)
- 最初:
(3, 1, 2)
→ print →3 1 2
- 入れ替え:
(1, 3, 2)
→ print →1 3 2
- 判定:
x=1, y=3, z=2
z < x
? →2 < 1
→ ✖z < y
? →2 < 3
→ ✔ → return2
結果 → 中央値は 2。

<今回の理解内容>
・ifの後に来ない「return」はif以外の場合。
・xとyの値を交換したい場合、別の文字(今回で言えばw)を導入する。
・PythonではPEP8(非公式日本語訳)と呼ばれる公式のスタイルガイドがある。
コメント