簡単な算術計算
Pythonでは、対話的に数値の計算を行うことができます。まずは簡単な計算から始めましょう。
3 + 5結果は 8 です。引き続き、いくつかの例を見てみましょう。
17 - 5 # 引き算3 * 8 # 掛け算7 / 2 # 割り算(実数)7 // 2 # 割り算(整数、切り捨て)7 % 2 # 剰余(余り)2 ** 10 # べき乗コメント
# から行末まではコメントとして扱われ、プログラムの実行には影響しません。コメントはコードの説明を記すのに使います。
# これはコメントです3 + 5 # 足し算の結果は8整数と実数
Pythonには主に2種類の数があります。整数(int)と実数(float、浮動小数点数)です。
type(7) # <class 'int'>type(7.0) # <class 'float'>type(7/1) # <class 'float'> ← 注意!注意:
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 |
実数のべき表示
非常に大きな数や小さな数は、指数表記(べき表示)で表されます。
2.0 ** 100結果は 1.2676506002282294e+30 のように表示されます。ここで e+30 は を意味します。
いくらでも大きくなる整数
Pythonの整数は精度に制限がありません。どんなに大きな整数でも正確に扱えます。
2 ** 100結果は 1267650600228229401496703205376 と正確に表示されます。
整数と実数の間の変換
int() で実数を整数に、float() で整数を実数に変換できます。
int(3.14) # 3(小数部分を切り捨て)int(-2.7) # -2(0に近い方へ切り捨て)float(2) # 2.02 + 0.0 # 2.0(自動的に実数に変換)数値誤差
浮動小数点数には数値誤差が不可避です。これは有限のビット数で無限の精度を表現しようとするためです。
10 ** 60 # 正確な整数float(10 ** 60) # 1e+60int(float(10 ** 60)) # 誤差が生じる!重要: 数え上げのような離散的な値を扱うときは、実数を経由せずに整数のみで演算するようにしましょう。
演算子の優先順位と括弧
掛け算・割り算は足し算・引き算よりも優先順位が高いです。括弧 () で評価順序を指定できます。
7 - 2 * 3 # 1(掛け算が先)(7 - 2) * 3 # 15(括弧が先)17 - 17//3*3 # 2**(べき乗)は右に結合します。
56 ** 4 ** 2 # = 56 ** 1616 / 8 / 2 # = (16 / 8) / 2 = 1.0(左に結合)算術演算子の優先順位(強い順):
**(べき乗、右結合)- 単項の
+,- *,/,//,%(左結合)+,-(左結合)
空白
演算子と数の間には半角の空白を自由に入れることができます。ただし、複数文字の演算子(** や //)の間に空白を入れることはできません。
7 **2 # OK → 497* *2 # SyntaxError!注意: 日本語の全角空白は空白とみなされず、エラーになります。
エラー
エラーが起きた場合は、修正して再評価できます。
10 / 0 # ZeroDivisionError: division by zero数学関数(モジュールのインポート)
数学関数は math モジュールをインポートして使います。
import mathmath.sqrt(2) # 1.4142135623730951(平方根)math.sin(0) # 0.0math.pi # 3.141592653589793(円周率)math.sin(math.pi/2) # 1.0math.pi は円周率 を値とする変数です。
の結果は本来 になるはずですが、数値誤差のため非常に小さい値になります。
練習
黄金比を求める
黄金比とは、 に を加えて で割ったものです。
math.sqrt を使って黄金比を求めてください。