1-1

数値演算

簡単な算術計算

Pythonでは、対話的に数値の計算を行うことができます。まずは簡単な計算から始めましょう。

python
3 + 5

結果は 8 です。引き続き、いくつかの例を見てみましょう。

python
17 - 5    # 引き算3 * 8     # 掛け算7 / 2     # 割り算(実数)7 // 2    # 割り算(整数、切り捨て)7 % 2     # 剰余(余り)2 ** 10   # べき乗

コメント

# から行末まではコメントとして扱われ、プログラムの実行には影響しません。コメントはコードの説明を記すのに使います。

python
# これはコメントです3 + 5  # 足し算の結果は8

整数と実数

Pythonには主に2種類の数があります。整数(int)と実数(float、浮動小数点数)です。

python
type(7)     # <class 'int'>type(7.0)   # <class 'float'>type(7/1)   # <class 'float'>  ← 注意!
整数(int)と実数(float)の関係int(整数)7-32 ** 100精度に制限なしfloat(実数)7.03.141.5e+10数値誤差ありfloat()int()⚠️ / 演算子は常に float を返す(例: 7/1 → 7.0)

注意: 7/1 の結果は 7.0(実数)になります。/ 演算子は常に実数を返します。整数の割り算をしたい場合は // を使います。

算術演算子のまとめ

| 演算子 | 名前 | 例 | 結果 | |:---:|:---:|:---:|:---:| | + | 加算 | 3 + 5 | 8 | | - | 減算 | 17 - 5 | 12 | | * | 乗算 | 3 * 8 | 24 | | / | 除算(実数) | 7 / 2 | 3.5 | | // | 除算(切り捨て) | 7 // 2 | 3 | | % | 剰余 | 7 % 2 | 1 | | ** | べき乗 | 2 ** 10 | 1024 |

実数のべき表示

非常に大きな数や小さな数は、指数表記(べき表示)で表されます。

python
2.0 ** 100

結果は 1.2676506002282294e+30 のように表示されます。ここで e+30×10"30"\times 10^{"{30}"} を意味します。

いくらでも大きくなる整数

Pythonの整数は精度に制限がありません。どんなに大きな整数でも正確に扱えます。

python
2 ** 100

結果は 1267650600228229401496703205376 と正確に表示されます。

整数と実数の間の変換

int() で実数を整数に、float() で整数を実数に変換できます。

python
int(3.14)    # 3(小数部分を切り捨て)int(-2.7)    # -2(0に近い方へ切り捨て)float(2)     # 2.02 + 0.0      # 2.0(自動的に実数に変換)

数値誤差

浮動小数点数には数値誤差が不可避です。これは有限のビット数で無限の精度を表現しようとするためです。

python
10 ** 60                 # 正確な整数float(10 ** 60)          # 1e+60int(float(10 ** 60))     # 誤差が生じる!
なぜ数値誤差が起きるのか?整数(int)桁数の制限なし ✓実数(float)64ビットに圧縮誤差が発生!情報の欠落 ✗符号1指数部(11ビット)10000111100仮数部(52ビット)...

重要: 数え上げのような離散的な値を扱うときは、実数を経由せずに整数のみで演算するようにしましょう。

演算子の優先順位と括弧

掛け算・割り算は足し算・引き算よりも優先順位が高いです。括弧 () で評価順序を指定できます。

python
7 - 2 * 3      # 1(掛け算が先)(7 - 2) * 3    # 15(括弧が先)17 - 17//3*3   # 2
式の評価順序:17 - 17 // 3 * 3① 17 // 3 を計算17 // 3 → 5② 5 * 3 を計算5 * 3 → 15③ 17 - 15 を計算17 - 15 → 2演算子の優先順位(高い順)**べき乗(右結合)最高* / // %乗除算+ -加減算( )括弧で上書き最低

**(べき乗)は右に結合します。

python
56 ** 4 ** 2   # = 56 ** 1616 / 8 / 2     # = (16 / 8) / 2 = 1.0(左に結合)

算術演算子の優先順位(強い順):

  1. **(べき乗、右結合)
  2. 単項の +, -
  3. *, /, //, %(左結合)
  4. +, -(左結合)

空白

演算子と数の間には半角の空白を自由に入れることができます。ただし、複数文字の演算子(**//)の間に空白を入れることはできません。

python
7 **2     # OK → 497* *2     # SyntaxError!

注意: 日本語の全角空白は空白とみなされず、エラーになります。

エラー

エラーが起きた場合は、修正して再評価できます。

python
10 / 0     # ZeroDivisionError: division by zero

数学関数(モジュールのインポート)

数学関数は math モジュールをインポートして使います。

python
import mathmath.sqrt(2)         # 1.4142135623730951(平方根)math.sin(0)          # 0.0math.pi              # 3.141592653589793(円周率)math.sin(math.pi/2)  # 1.0

math.pi は円周率 π=3.141592653589793...\pi = 3.141592653589793... を値とする変数です。

sin(π)\sin(\pi) の結果は本来 00 になるはずですが、数値誤差のため非常に小さい値になります。

練習

黄金比を求める

基礎

黄金比とは、"5"\sqrt{"{5}"}11 を加えて 22 で割ったものです。

φ="1+sqrt5""2"1.618\varphi = \frac{"{1 + \\sqrt{5}}"}{"{2}"} \approx 1.618

math.sqrt を使って黄金比を求めてください。