edubun
日本語

数と算術

Python 3では、7 / 2は3.5、7 // 2は3、7 % 2はあまりの1を返します。

先を読む前に予想する4つの割り算

下の出力を隠して、各行が何を出力すると思うかを書き出しましょう。ほとんどの人は最初の1つを当て、ほかのうち少なくとも1つを外します。その外れた予想から、この単元が始まります。

print(7 / 2)
print(8 / 2)
print(7 // 2)
print(7 % 2)
出力
3.5
4.0
3
1

2行目は人を驚かせます。8 / 2はちょうど4ですが、Pythonは4.0を出力します。理由は、/が、割り切れる場合でも、いつもfloat、つまり小数点のある数を返すからです。整数の割り算がほしければ、Pythonには別の演算子//があり、切り捨て除算と呼ばれます。割ってから、下の整数へ切り捨てます。対になる演算子%は、残ったあまりを返します。この2つで、小学校の「7わる2は3あまり1」の問いに答えられます。

2ずつ進むと3回で7に収まり、1が余ります。7 // 2が進める回数、7 % 2が余りです。

%は、思ったより多くの場所に現れます。n % 2が0なら、数は偶数です。数の最後の桁はn % 10です。135分を時間と分に直すのは、135 // 60時間と135 % 60分です。

minutes = 135
print(minutes // 60, "h", minutes % 60, "min")
print(2026 % 2, 2027 % 2)
print(4589 % 10)
出力
2 h 15 min
0 1
9

そのほかの演算子と、Pythonが使う順序

演算子意味例結果
+足し算7 + 29
-引き算7 - 25
*掛け算7 * 214
/割り算(float)7 / 23.5
//切り捨て除算7 // 23
%あまり7 % 21
**べき乗7 ** 249

Pythonは、数学の授業と同じ順序に従います。**が先、次に*、/、//、%、次に+と-で、各グループの中では左から右です。括弧はすべてに先立つので、迷ったら括弧を足しましょう。費用はかからず、次の読み手に意図がはっきり伝わります。

print(2 + 3 * 4)
print((2 + 3) * 4)
print(2 ** 10)
print(10_000 * 3)
出力
14
20
1024
30000

最後の行は、ちょっとした便利な機能を示しています。Pythonでは、長い数の中にアンダースコアを書けるので、10_000は10000より読みやすくなります。数を計算するときには無視され、出力にも現れません。コンマはこのようには使えません。コンマはすでに「次の値」を意味するからです。

小数は2進数で保存されるので、答えがわずかにずれることがある

0.1 + 0.2を試してみましょう。Pythonチュートリアルは、答えが0.3ではなく0.30000000000000004になる理由に、章を丸ごと割いています。floatは2進数で保存され、0.1には、1/3に正確な10進数の形がないのと同じように、正確な2進数の形がありません。誤差はごく小さく、round()は、出力するときにそれを隠します。round()は、ちょうど真ん中にある値を偶数の隣へ丸めることに注意してください。組み込み関数のページは、round(0.5)を0、round(1.5)を2としています。お金をウォンやセントなど整数の単位で扱うなら、金額をintで持てば、問題を完全に避けられます。

print(0.1 + 0.2)
print(round(0.1 + 0.2, 2))
print(round(0.5), round(1.5), round(2.5))
print(int(3.99), float(7))
出力
0.30000000000000004
0.3
0 2 2
3 7.0

input()は常に文字列を返す

input()はプロンプトを表示し、ユーザーが何かを入力してEnterを押すのを待ち、入力されたものを文字列として返します。15と入力されても、得られるのは文字の"15"です。それで算術をするには、int()かfloat()で変換します。floatにint()を使うと、丸める代わりに小数部分を取り除くので、int(3.99)は3です。

age = input("How old are you? ")
next_year = int(age) + 1
print("Next year you will be", next_year)
出力
How old are you? 14
Next year you will be 15
上の例では、14はユーザーが入力したものです。プログラム自体には数14は含まれていません。
/いつもfloatを返す割り算:8 / 2は4.0
//切り捨て除算:7 // 2は3
%あまり:7 % 2は1
**べき乗:2 ** 3は8
int()"15"や3.9を整数(15、3)にする
input()ユーザーが入力した1行を、文字列として読む
round(x, n)小数第n位に丸める。ちょうど中間の値は偶数側へ
  1. このコードは何を出力しますか。
    print(9 / 3)
  2. このコードは何を出力しますか。
    print(17 // 5, 17 % 5)
  3. このコードは何を出力しますか。
    print(2 + 3 * 4 ** 2)
  4. このコードは何を出力しますか。
    print(2 ** 3)
  5. このコードは何を出力しますか。
    print(2 ^ 3)
    • 8
    • 6
    • 1
    • An error
  6. このコードは何を出力しますか。
    print(int("20") + 5)
  7. このコードは何を出力しますか。
    print("20" + "5")
  8. このコードは何を出力しますか。
    print(int(7.9))
  9. このコードは何を出力しますか。
    print(round(2.5))
  10. パン1個は3,500ウォンで、手持ちは10,000ウォンです。これは何を出力しますか。
    won = 10000
    price = 3500
    print(won // price, won % price)
  11. nが偶数かどうかを教える式はどれですか。
    • n / 2 == 0
    • n // 2 == 0
    • n % 2 == 0
    • n ** 2 == 0
よくある間違い
  • 「2 ^ 3は8。」 Pythonでは、^はビット演算子で、2 ^ 3は1です。べき乗は**を使うので、2 ** 3は8です。プログラムはエラーなく動くので、この間違いは見つけにくいです。
  • 「数を入力すれば、input()は数をくれる。」 常に文字列を返します。"14" + 1は、TypeError: can only concatenate str (not "int") to strで止まります。先にint(input(...))で変換しましょう。
  • 「0.1 + 0.2 == 0.3はTrue。」 Falseです。0.1 + 0.2は0.30000000000000004だからです。round(0.1 + 0.2, 2) == 0.3のように丸めた値を比べるか、ウォンやセントのような整数の単位でintを使って数えましょう。
先生からひとこと予想の練習から始め、4.0という意外な結果を使いましょう。小学校であまりのある割り算を知っている学習者は、//と%がその名前で呼ばれると、すばやく身につけます。floatの丸め誤差は、一度見せれば十分で、長居しないようにしましょう。大切な習慣は、お金を整数で保つことです。round(2.5)が2になるのは、数学の授業で習う丸めと矛盾するので、質問を想定し、議論せずに組み込み関数のドキュメントを示しましょう。input()の変換エラーは、学習者が最初のプロジェクトで最もよくぶつかるものです。
ポイント
  • /は常にfloat、//は整数の商、%はあまり。
  • **はべき乗。^はべき乗ではない。
  • 順序:括弧、**、次に * / // %、次に + -。
  • 0.1 + 0.2は0.30000000000000004。お金はintで保つ。
  • input()は文字列を返す。int()かfloat()で変換する。
このコースの出典 (6)
  • Python Software Foundation, The Python Tutorial for Python 3.12 (docs.python.org/3.12/tutorial: 2 Using the Python Interpreter, 3 An Informal Introduction to Python (numbers, text, lists), 4 More Control Flow Tools (if, for, range, break and continue, defining functions, default argument values, 4.10 coding style: 4-space indentation), 5 Data Structures (list methods, 5.5 dictionaries, insertion order), 8 Errors and Exceptions (syntax errors, exceptions, reading the traceback, handling exceptions), 15 Floating-Point Arithmetic (0.1 + 0.2))
  • Built-in Functions (docs.python.org/3.12/library/functions.html: print, input, len, int, float, str, type, round (round half to even: round(0.5) and round(-0.5) are 0, round(1.5) is 2), range, sum, min, max, sorted)
  • Built-in Types (str methods upper, lower, replace, strip; dict.get; list.append, pop, remove, sort returning None)
  • General Python FAQ (docs.python.org/3.12/faq/general.html: Guido van Rossum began Python in the 1989 Christmas holidays, posted it to USENET in February 1991, named it after Monty Python's Flying Circus)
  • Curriculum for the Korean pages: 교육부 고시 제2022-33호 [별책 10] 정보과 교육과정 (PDF read 2026-10-19: 중학교 정보 [9정03-05] 리스트 등 데이터를 순차적으로 저장하는 구조, [9정03-06] 논리 연산과 중첩 제어 구조, [9정03-07] 함수 활용과 디버거로 오류 수정, [9정03-08] 실생활 문제를 프로그래밍으로 해결, 적용 시 고려 사항 「학생의 수준을 고려하여 적합한 프로그래밍 언어를 선정」; 고등학교 정보 [12정03-04] 자료형, [12정03-05] 표준입출력, [12정03-07] 제어 구조)
  • Bug story only: Smithsonian National Museum of American History, Log Book With Computer Bug, 1947, Harvard Mark II, "first actual case of bug being found", probably not Hopper's log book (americanhistory.si.edu/collections/object/nmah_334663, read 2026-10-19)

確認日: 2026-10-19