32.2. 式と評価
数の計算を中心に、Python の機能のなかの、簡単な一部を紹介します。
基本的なプログラムは 式 (expression) と 評価 (evaluation) という枠組みで理解することができます。
比較的少ない規則で全体を把握できるため、HWBではここから説明を始めます。
他に、print
など 文 から紹介する流儀もあります。
セル #
先に
12.5. Colabを使った演習
でColab の基本を学び、セルに 3 + 5
と記入して実行すると 8
という結果を得られることを体験しました。
毎回スクリーンショットで示すことは煩雑なので、次の長方形領域のような略記を併用します。
3 + 5
の部分がセルへの入力、8
が実行後の応答と対応します。
3 + 5
算術式と演算子 #
Python のプログラムの書き方を、まず、「式を評価して値(あたい)を知る」という枠組みで紹介します。
先ほどの 3 + 5
を式、8
が値に対応します。まず、このような四則演算の範囲で式を考え、その後、拡張します。
四則演算は Python の式として概ね有効な文法です。このことを、 式 として理解してみましょう。
まず、式とは「次の(1)または(2)である」と考えます。これは、Pythonの厳密な定義ではなく、考え方の紹介のためのものです。
- (1) 原始式 (atom)
- 数そのもの (e.g.,
3
,5
,3.1415
)
(評価した値は自分自身)
- (2) 式と演算子の適切な組合せ
- e.g.,
(3+5)
,(1+(2+3))
(1)より数そのものは式です。(2)から、(3+5)
は、3
, 5
は原子式として式で、また2項演算子 +
による適切な組み合わせとして、(3+5)
も式です。(1+(2+3))
はもう少し複雑ですが、内側の (2+3)
は先ほど同様に式ですから、全体は (1+式)
という形になり、これもまた2項演算子 +
による適切な組み合わせとして式になります。(2)の定義内に「式」が含むことので、このように式を組み合わせた式を作成することができます。式を構成する式を 部分式 とも言います。
2項演算子 | 意味 |
---|---|
+ |
加算 |
- |
減算 |
* |
乗算 |
/ |
除算 |
// |
整数除算 |
% |
剰余 |
** |
冪乗 |
単項演算子 | 意味 |
---|---|
- |
負 |
+ |
正 |
演算子の前後には、読みやすさのために空白を入れて(3 + 5)
のように表記することが勧められています。意味は変わりません。 また、意味が明確なところでは2項演算子の括弧を省略できます。つまり、((1 + 2) + 3)
を1 + 2 + 3
と書けますし、4 + 5 * 6
は、乗算が優先して(4 + (5 * 6))
の略記です。
練習として、自分で式を作ってColabで実行し、Python の評価結果が自分の計算と一致することを確認しましょう。
(3 + 5) * 2
--5
注 (-(-5)) の意味となる
定数 #
\(\pi\) など数学の定数を使うこともできます。
math
モジュールを import
する意味なのですが、この文法の説明は後回しにします。これ以降 math
に関する機能を利用可能になります
import math
なぜ初めから全部の機能を使えないのか?
Pythonには math
以外にも多数のモジュールが用意されていて、通常のプログラムではその一部の機能のみを使います。必要な機能のみ import
することで、メモリの節約や起動の高速化になります。
円周率は math.pi
, 自然対数は math.e
で定義されています。
円周率の2倍を表す式はは、2 * math.pi
と書けます。
なお、実数の表現や演算では数値誤差が生じ得ます。実用に使う場合は、精度に注意してください。
14.2.2. 浮動小数点数
math.pi
2 * math.pi
このような定数を扱えるように、式の定義を次のように更新します。定数は、原子式です。
- (1) 原始式 (atom)
- 数そのもの (e.g.,
3
,5
,3.1415
)- [New!] 定数 (e.g.,
math.pi
,math.e
)
(評価した値は自分自身)
- (2) 式と演算子の適切な組合せ
- e.g.,
(3+5)
,(1+(2+3))
radius
(半径) という定数が 10 という数を表すように設定しています。この文法の紹介も後回しにします。
radius = 10
radius
radius * 2
関数 #
関数も式を構成する要素です。
math.floor
という関数で、3.14 の小数点以下を切り捨てた値を求めています。
math.floor(3.14)
math.gcd
という関数で、192 と 324 の最大公約数を計算しています。これらの関数は、あらかじめ、Python で用意されています。
math.gcd(192, 324)
自分で関数を定義することもできます。
式 | 値 |
---|---|
f(0) | 100 |
f(5) | 125 |
左のセルが Python での f(x)
の定義です。このセルを実行後は、Pythonの処理系が関数
\(f(x)\)
を認識しれ、右のような計算が可能になります。
def f(x):
return x ** 2 + 100
f(0)
f(5)
関数定義の基本パターン
def 関数名(x): return xを使う式
上記の例は、関数名は
f
1文字で、xを使う式
はx ** 2 + 100
でした。 関数名には、長い名前を使うこともできます。当面はアルファベット小文字 5文字前後で名前をつけることをお勧めします。
厳密さ注意 — 上記のパターンの一部は一字一句厳密に入力する必要があります
- パターン中の
def
:
return
は一字一句このままreturn
の左に、スペース (空白文字) を 4つ
関数の引数は、2つ以上持つことができますし、名前も自由につけることができます。 引数は、ひきすう、 \(\sim\) 変数)} と読みます。
関数定義の基本パターン(改)
def 関数名(引数1, 引数2, ...): return 引数を使う式
add(a, b)
は、右のように定義します
def add(a, b):
return a + b
return
する式の中の変数を置き換えて計算します
add(1+2, 5) * 2
ここまでで、式の定義は次のように拡張されました。
- (1) 原始式 (atom)
- 数そのもの (e.g.,
3
,5
,3.1415
)- 定数 (e.g.,
math.pi
,math.e
)
(評価した値は自分自身)
- (2) 式と演算子の適切な組合せ
- e.g.,
(3+5)
,(1+(2+3))
- (3) [New!] 関数
- e.g.,
math.floor(3.14)
,add(1+2, 3)