東京大学のPythonプログラミング入門「1-4. テストとデバッグ」備忘録

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 なら、xy を入れ替えます。
これで 必ず x <= y になる ようにしています。

例: (3, 1, 2) の場合 → 入れ替えて (1, 3, 2) になる。

次の print1 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 → ✔ → return 2

結果 → 中央値は 2

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

コメント

タイトルとURLをコピーしました