はじめに
ここでは、pythonプログラミングの基本である、四則演算、計算の優先順位、変数について解説します。まずは、Google Colaboratoryの使い方 を参考に、プログラミングの環境に移動しましょう。ローカルに環境を構築している方は、そちらでもokです。
四則演算
四則演算とは、足し算、引き算、掛け算、割り算のことです。これについては、説明を聞くよりも見てみた方が早いと思います。次のコードをコピペして、実行してみましょう。
a = 10 + 20 + 40
b = 10 - 20 - 40
c = 3 * 5 * 10
d = 5/2
print("足し算の例: ", a)
print("引き算の例: ", b)
print("掛け算の例: ", c)
print("割り算の例: ", d)
1〜4行目に「=」があります。数学の場合、「=」は「左辺と右辺は等しい」ことを意味しますが、プログラミングの場合は意味が異なり、「右辺の値を左辺に代入する」となります。
1行目の右辺は「10+20+40」ですから、70となります。それが1行目の左辺「a」に代入されるので、aには70が代入されていることになります。この計算結果は、6行目のコードで見ることができます。6行目にあるprint関数は、変数の中身を見ることができる機能を有しています。なお、変数とは何かしらの値が代入される対象のことで、関数とは何かしらの役割を有する機能のことです(例えば、print関数は表示の機能を有しています)。
2〜4行目にあるb、c、dはそれぞれ、引き算、掛け算、割り算を意味する演算です。print関数で中身を見てみると、手計算と同じ結果が表示されるはずです。
計算の優先順位
計算は、掛け算と割り算が、足し算と引き算よりも優先に計算されます。例えば、以下のコードを実行してみましょう。
a = 5 + 10 * 2
print("計算結果", a)
実行すると、25という結果が表示されるはずです。これは、10と2の掛け算が先に行われて、それに対して5が加えられるためです。
しかし、時として足し算を優先に計算させたい場合もあります。この場合は、カッコを利用します。カッコの中身の計算は、カッコの外にある掛け算や割り算よりも優先的に行われます。これを確かめるため、以下のコードを実行してみましょう。
b = (5 + 10) * 2
print("計算結果", b)
30と表示されるはずです。これは、5+10が先に計算され、それが2枚されるためです。
もう少し複雑なものとして、以下はわかるでしょうか?
c = (2 + 3) / (5 + 5)
print("計算結果", c)
これは、0.5が正解です。2+3と5+5がそれぞれ先に計算され、割り算されるためです。ちなみにプログラムでは、分数を出力することができません。このため、5/10や1/2などは0.5という小数で表現されます。
ゼロ除算の禁止
10という数字を10で割ると、答えは1です。
10という数字を5で割ると、答えは2です。
10という数字を1で割ると、答えは10です。
10という数字を0.5で割ると、答えは20です。
10という数字を0.1で割ると、答えは100です。
…という感じで続けていくと気がつく通り、割り算とは、割る数字を小さくしていくことで、答えがどんどん大きくなっていきます。手で計算しても構いませんが、せっかくプログラムを覚えたので、書いてみましょう。
a1 = 10 / 10
a2 = 10 / 5
a3 = 10 / 1
a4 = 10 / 0.5
a5 = 10 / 0.1
print("10を1で割ると...", a1)
print("10を5で割ると...", a2)
print("10を1で割ると...", a3)
print("10を0.5で割ると...", a4)
print("10を0.1で割ると...", a5)
先ほど述べたように、割る数字が小さくなると、答えが大きくなることがわかります。では、割る数字を0.01、0.001と小さくしていって、0にするとどうなるでしょうか? とても大きな数字になることは想像に難しくないと思います。答えをいうと、これは無限大になります(数学的に厳密な説明じゃありません)。無限大はプログラムではとても扱いにくいので、「0で割る行為」を禁止する言語が多いです。pythonもこれに該当するため、0で割った場合、エラーを出すようになっています。これを体験するために、下記のコードを実行してみましょう。
ZERO = 10 / 0
ZeroDivisionError: division by zero というエラーメッセージが出たと思います。文字通り、0で割ってはいけませんというエラーです。
変数名のルール
さて、これまでのコードの中で、いろいろな名前の変数が定義されてきました。羅列してみましょう。
- a, b, c, d
- a1, a2, a3, a4, a5
- ZERO
ここからみてわかるように、変数名は比較的自由につけることができます。
- アルファベットは、大文字A、小文字aが混ざっていても良い。
- 数字を入れても良い。
- 記号はアンダースコアのみ使用できる。
したがって、以下のような変数名もokです。
- Number_of_samples_01
プログラムのコードが大きくなると、aやbなどの変数名では訳が分からなくなることがあるので、みたら大体どのような値を代入するためのものかわかるような変数名にすることが一般的です。
なお例外として、数字が冒頭に来る変数はNG、などの細かい規則もあります。これについては、エラーを出しながら学んでいくと良いと思います。
変数を計算に利用する方法
これまで、変数は必ず左辺に位置していました。「=」の左側は代入される側であるため、計算結果を代入する媒体として、変数が使われてきたためです。しかし、変数を右辺におくことも可能です。例えば、以下のコードを見てください。
a = 100
b = a * 2
c = b * 3
Calc_example_01 = a + b + c
print("計算結果", Calc_example_01)
今まで変数は左辺にしかなかったのに、右辺にも出てきました。でも、なんのことはありません。プログラムを上から読んで、右辺の変数を数字に置き換えて考えていけば、簡単に理解できます。ただ、まだ慣れていないと思うので、丁寧に読んでいきます。
- 1行目: aに100を代入
- 2行目: bにaを2倍した値を代入(aは100なので、bは100の2倍で、200)
- 3行目: cにbを3倍した値を代入(bは200なので、cは200の3倍で、600)
- 4行目: Calc_example_01に a+b+c を代入(aは100、bは200、cは600なので、900が代入される)
以上より、print関数に通された Calc_example_01 は、900を示すはずです。
このように、変数とは単に代入されるだけのものではなく、代入された結果を別の計算のために利用することも多々あります。ぜひ覚えるようにしましょう。