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] を用いて次の式で計算され、成人の肥満度を示す指数です。
\(w\) および \(h\) が与えられたとき、BMI を計算するプログラムを作ってみよう。答えを見るには下の「Show code cell content」をクリックしてください。
w = 68
h = 1.80
Show 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\) と \(b\) が与えられたときに、斜辺の長さ \(c\) の長さを求めるプログラムを書いてみましょう。
a = 3
b = 4
Show code cell content
c = math.sqrt(a * a + b * b)
c
5.0
練習問題 DC-1
黄金数(golden number) \(\phi\) は次の式で表されます。
黄金数を計算するプログラムを作成してください。
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)\) の解は、次式で計算されます。
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 対数」などのキーワードでウェブ検索すると見つかります。
Show 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 回折ったら厚さが太陽まで届いてしまいます。でも、うちの研究所の書類の山はそれを軽く超えています。まさに宇宙規模の問題に挑んでいる証拠です。