20.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なぜ初めから全部の機能を使えないのか?
円周率は math.pi, 自然対数は math.e で定義されています。
円周率の2倍を表す式はは、2 * math.pi と書けます。
なお、実数の表現や演算では数値誤差が生じ得ます。実用に使う場合は、精度に注意してください。
14.2.2. 浮動小数点数
math.pi2 * 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 = 10radiusradius * 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 + 100f(0)f(5)関数定義の基本パターン
def 関数名(x): return xを使う式上記の例は、関数名は
f1文字で、xを使う式はx ** 2 + 100でした。 関数名には、長い名前を使うこともできます。当面はアルファベット小文字 5文字前後で名前をつけることをお勧めします。
厳密さ注意 — 上記のパターンの一部は一字一句厳密に入力する必要があります
- パターン中の
def:returnは一字一句このままreturnの左に、スペース (空白文字) を 4つ
関数の引数は、2つ以上持つことができますし、名前も自由につけることができます。 引数は、ひきすう、 \(\sim\) 変数)} と読みます。
関数定義の基本パターン(改)
def 関数名(引数1, 引数2, ...): return 引数を使う式
add(a, b) は、右のように定義します
def add(a, b):
return a + breturn する式の中の変数を置き換えて計算します
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)