Code Fix

中級

// と / の違い(整数除算と真の除算)

// は切り捨て除算、/ は常に浮動小数点数を返す真の除算です。小数の結果が欲しい場面で // を使うと、エラーなく結果だけが狂います。

なぜエラーが出ないのか

出力: 3
(エラーなし)
Pythonは何も報告しません。文法として正しいためです
出力: 3
実際の挙動 — 期待した結果と食い違っている箇所
見つけ方
エラーが出ないので、出力を目で確かめるしかありません。この種の誤りが最も発見が遅れます

このエラーが出る典型パターン

パターン1

 1  total = 7
 2  count = 2
 3  average = total // count
                     ^
 4  print(average)
出力: 3期待: 3.5 (エラーにはなりません)

//は切り捨て除算です。平均のような小数を求めたい場面で使うと、エラーは出ないまま結果だけがずれます。

直し方: // を / にします。

この問題を解いてみる →

広告
広告スロット(未設定)

パターン2

 1  a = 3
 2  b = 8
 3  percent = a // b * 100
                 ^
 4  print(percent)
出力: 0期待: 37.5 (エラーにはなりません)

整数同士の//は結果も整数(切り捨て)です。パーセンテージ計算では/を使わないと情報が丸ごと消えます。

直し方: // を / にします。

この問題を解いてみる →

パターン3

 1  distance = 10
 2  time = 4
 3  speed = distance // time
                      ^
 4  print(speed)
出力: 2期待: 2.5 (エラーにはなりません)

他言語のint同士の割り算の感覚で//を使うと、Pythonでは意図的な切り捨て除算という別の演算子を使ったことになります。

直し方: // を / にします。

この問題を解いてみる →

パターン4

 1  items = 9
 2  boxes = 4
 3  per_box = items // boxes
                     ^
 4  print(per_box)
出力: 2期待: 2.25 (エラーにはなりません)

1箱あたりの個数を//で計算すると端数が消えます。分配の余りも意味を持つ場面では/を使います。

直し方: items // boxes を items / boxes にします。

この問題を解いてみる →

パターン5

 1  cost = 25
 2  people = 4
 3  share = cost // people
                  ^
 4  print(share)
出力: 6期待: 6.25 (エラーにはなりません)

割り勘の計算でも同じ問題が起きます。//だと1人あたりの金額が切り捨てられ、合計が足りなくなります。

直し方: // を / にします。

この問題を解いてみる →

よくある誤解

他言語のint同士の割り算に慣れていると「Pythonの/も切り捨てるはず」と誤解しがちですが、Python 3の/は常にfloatを返します。切り捨てたい場合は明示的に//を使います。

実務での勘所

//は単純に小数点以下を切り捨てるのではなく、負の無限大方向に丸める「floor division(床除算)」です。7 // 2は3ですが、-7 // 2は-4になります。多くの言語(C、Javaなど)の整数除算はゼロに向かって切り捨てる(truncation)ため、-7 / 2はそれらの言語では-3です。この違いは、Pythonの%が常に除数と同じ符号になるという設計と表裏一体の関係にあり、a == (a // b) * b + a % bという等式が常に成り立つように、両方の演算子が揃えて設計されています。

演習をはじめる

関連するエラー

広告
広告スロット(未設定)