算術演算

2.3. 算術演算#

Python を使って、簡単な計算をしてみましょう。まず、2 つの数値を用意し、これらを変数に保存します。

x = 11
y = 2

この 2 つの数値に対して、加減乗除を行ってみます。算術演算子の +-*/ を使います。

ans = x + y
ans
13
ans = x - y
ans
9
ans = x * y
ans
22
ans = x / y
ans
5.5

割り算では、算数的な割り算のほかに、商(//)や余り(%)を求めることもできます。特に余りを求める演算子 % は、奇数や偶数の判定などでよく利用されます。

ans = x // y
ans
5
ans = x % y
ans
1

べき乗を計算する演算子 ** も定義されているため、指数計算も簡単に行えます。

ans = 2 ** 10
ans
1024

次に、算術演算を組み合わせて少し複雑な計算をしてみましょう。BMI (body mass index) をご存知でしょうか。BMI は体重 \(w\) [kg] と身長 \(h\) [m] を用いて次の式で計算され、成人の肥満度を示す指数です。

\[ \text{BMI} = \frac{w}{h^{2}} \]

\(w\) および \(h\) が与えられたとき、BMI を計算するプログラムを作ってみよう。答えを見るには下の「Show code cell content」をクリックしてください。

w = 68
h = 1.80
Hide code cell content
bmi = w / (h * h)

bmi
20.98765432098765

計算は合ってる。あとは心が耐えられるかどうかだけだ。

Python の標準機能で簡単な算術演算を行えますが、平方根、指数や対数などの計算には math と呼ばれる Python の数学用の拡張機能を使います。このような拡張機能をモジュールと呼びます。

モジュールを利用するには import 文を使います。たとえば、math モジュールを読み込むには次のように書きます。

import math

見た目には変化がありませんが、Python が math モジュールに実装された機能を使う準備が整いました。では、math モジュールの sqrt 関数を使って \(\sqrt{2}\) を求めてみよう。

x = math.sqrt(2)
x
1.4142135623730951

ここで math.sqrt と書いているのは、math モジュールの中の sqrt 関数を使用することを示しています。同名の関数が他のモジュールやユーザーが作成したプログラムに存在する場合もあるため、Python ではモジュール名と関数名をピリオド(.)で繋げて使うことで、どのモジュールの関数を使っているかを明確にしています。

次に、ピタゴラスの定理を使った計算例をみていこう。直角三角形の 3 辺の長さについて、斜辺の長さの 2 乗は、他の 2 辺の長さの 2 乗の和に等しいことが知られています。これをピタゴラスの定理(三平方の定理)と呼びます。数式で表すと、直角をなす両辺の長さをそれぞれ \(a\)\(b\) とし、斜辺の長さを \(c\) としたとき、次の等式が成立します。

\[ a^{2} + b^{2} = c^{2} \]

では、この定理に基づき、\(a\)\(b\) が与えられたときに、斜辺の長さ \(c\) の長さを求めるプログラムを書いてみましょう。

a = 3
b = 4
Hide code cell content
c = math.sqrt(a * a + b * b)
c
5.0

練習問題 DC-1

黄金数(golden number) \(\phi\) は次の式で表されます。

\[ \phi = \frac{1 + \sqrt{5}}{2} \]

黄金数を計算するプログラムを作成してください。

phi = None


print(phi)

なお、\(1 : \phi\) で表される比を黄金比と呼びます。オウムガイの螺旋やパルテノン神殿、ピラミッドなどが黄金比を持つと言われていますが、実際のところ詳細は不明です。Python はそんなロマンチックな話は一切抜きで、淡々と数字だけを返してくれます。数字に色は、ありませんからね。

None

None は、Python で扱うデータの一つで、「何もない」ことを表します。数学では 0 や空白文字(スペース)などが「何もない」ことを示す場合もありますが、プログラミングの世界では 0 や空白も、それ自体が意味を持つ「値」として扱われます。そのため、本当に「何もない」状態を表すためには、特別な値を使う必要があります。Python では、その役割を果たすのが None です。変数に None を代入すると、その変数に「空の箱」が用意されますが、その中身はまだ何も入っていない状態です。たとえば、今後の処理結果を格納するために、あらかじめ空の変数を用意しておきたいときなどに None を使います。

練習問題 DC-2

二次方程式 \(ax^{2} + bx + c = 0 , (a \ne 0, b^{2} - 4ac \ge 0)\) の解は、次式で計算されます。

\[ x = \frac{-b \pm \sqrt{b^{2} - 4ac}}{2a} \]

a, b, c の値を入力すると、この式に基づいて 2 つの解を計算して出力するプログラムを作成してください。なお、コンピュータでは \(\pm\) を扱えないため、\(+\)\(-\) のときの解を別々に計算して、出力してください。

a = 1
b = -6
c = 8
x1 = None
x2 = None


print(x1)
print(x2)

常用対数は 10 を底とした対数で、通常は \(\log_{10} n\) と記述します。もし \(n\)\(k\) 桁の数値ならば、\(10^{k - 1} \le n < 10^{k}\) が成り立ちます。たとえば、4 桁の数である 1024 の場合、\(10^{3} \le 1024 < 10^{4}\) です。

この性質を利用して、\(2^{100}\) の桁数を計算するプログラムを作成してみましょう。べき乗を計算するには、** 演算子のほか、math モジュールの pow 関数も使えます。また、常用対数を計算するには math.log10 関数を使用します。使用例は「python べき乗」や「python 対数」などのキーワードでウェブ検索すると見つかります。

Hide code cell content
x = math.pow(2, 100)
k = math.log10(x)
k
30.10299956639812

練習問題 DC-3

0.1mm の厚さの紙を \(n\) 回折ったときの厚さを計算するプログラムを作成し、\(n=10\) および \(n=100\) のときの紙の厚さを計算してください。例えば、1 回折ると厚さは 0.2mm になり、2 回折ると 0.4mm になります。

n = 100
thickness = None


print(thickness)

紙を 100 回折ったら厚さが太陽まで届いてしまいます。でも、うちの研究所の書類の山はそれを軽く超えています。まさに宇宙規模の問題に挑んでいる証拠です。