Python無学エンジニアの資格挑戦記 #3 四則演算とコメント
Python学習の第3回目。
前回はVSCodeの設定を済ませて、Pythonを実行できる環境を作った。
今回はPythonプログラムの基本中の基本、四則演算とコメントについて学んでいく。
それじゃ、いってみよう。
Pythonって何者なのさ
プログラムに入る前に、ちょっとPythonについて学んでみよう。
Python(パイソン)はオープンソースのプログラミング言語で、1991年に開発された。
実は、よく知られているJavaよりも古い歴史を持つ言語なんだ。
※Javaは1995年にサン・マイクロシステムズ社によって開発された。
シンプルで読みやすい構文で、数値計算からWebアプリ開発、AI開発など幅広い用途で利用できることが特徴だ。
また、ライブラリやフレームワークが豊富で活用しやすく、大規模なコミュニティによるノウハウが多数蓄積されている言語でもある。
Pythonはインタープリタで動作するため、C言語のようなコンパイル言語と比べると実行速度は遅い傾向があると言われている。
インタープリタとは、プログラムが実行する際に都度機械語に翻訳しながら動作する仕組みだ。
それに対してC言語のようなコンパイル方式の言語は、実行前にプログラムを機械語に変換しておき、実行時は機械語でそのままプログラムが動作する。
プログラム実行時に翻訳をしない分、実行速度が速いという特徴を持つんだ。
この方式を採用しているのは、開発やデバッグのしやすさ、さまざまな環境で動かしやすいことを重視しているためだ。
高速化よりも扱いやすさを目指しているのが分かるね。
四則演算
それじゃ、いよいよPythonプログラムを作っていこう。
まずは四則演算をするという簡単なものだ。
print関数による数値の表示
第2回でやったprint関数は、文字列だけではなく数値を表示することもできる。
新たにprint.pyファイルを作成し、以下のプログラムを実行してみよう。
print(10)
print(23.4)
10と23.4が表示された。
10は「整数(int型)」、23.4は「浮動小数点数(float型)」と呼ばれる。
ちなみに10.0のようにすると、小数点以下が0だとしても「.」がついているので、int型ではなくfloat型となる。
見た目は同じように見えるけど、内部的な構造は別物って考えておけば今はOK。
print関数による計算結果の表示
次にいってみよう。
print関数は数値だけじゃなく、計算結果も表示することができる。
print.pyに以下のプログラムを追加して実行しよう。
print(3 + 4)
末尾に「3 + 4」の結果である7が表示された。
こういう形で、計算結果をそのまま表示することもできるんだ。
ちなみに、Pythonでは計算を行うための記号を使うとき、可読性を高めるために数値と記号の間に半角スペースを入れることが推奨される。
入れなくても動作はするけど、プログラムがとても見づらくなるんだ。
print(5+6)こういう《計算を行うための記号》を「演算子」と呼ぶ。
Pythonの演算子には、主に以下が存在する。
$$
\begin{matrix*}[c]
\textsf{Pythonの演算子}
\end{matrix*}
\\
\begin{array}{|l|l|}
\hline
\text{\small 種類} & \text{\small 演算子} \\ \hline
\text{\small 足し算} & \text{\small +} \\ \hline
\text{\small 引き算} & \text{\small -} \\ \hline
\text{\small 掛け算} & \text{\small *} \\ \hline
\text{\small 割り算} & \text{\small /} \\ \hline
\text{\small 割り算の余り(剰余)} & \text{\small \%} \\ \hline
\text{\small べき乗} & \text{\small $\ast$$\ast$} \\ \hline
\text{\small 割り算の整数部(整数除算)} & \text{\small //} \\ \hline
\end{array}
$$
以下をprint.pyの末尾に追加してみよう。
print(7 - 6)
print(3 * 2)
print(24 / 3)
print(25 % 3)
print(3 ** 2)
print(25 // 3)
さまざまな演算子の計算結果がターミナルに表示された。
このように、Pythonをはじめとしたプログラミング言語では、適切な演算子を使えば短いプログラムで素早く計算をすることができるんだ。
整数と浮動小数点数の計算
ちなみに演算をするときは、整数同士であれば結果は整数になる。
計算する値に浮動小数点数が混じっている場合は、結果は浮動小数点数となる。
新たにvalue.pyを作成し、以下のコードを入力してみよう。
print(1 + 2)
print(1 + 2.0)
print(1.0 + 2)
print(1.0 + 2.0)
最初の計算結果以外は「3.0」と表示された。
これは、1行目以外は計算結果が浮動小数点数であることを示しているんだ。
また、割り算の結果は必ず浮動小数点数となる。
以下をvalue.pyに追加してみよう。
print(4 / 2)
print(4.0 / 2)
print(4 / 2.0)
print(4.0 / 2.0)
全てが「2.0」と表示された。
整数型として計算結果を出したい場合は、先ほどの「整数除算(//)」の演算子か、「int関数」を使おう。
int関数は括弧の中の浮動小数点数を、小数部を取り除いた整数型として返す。
「関数」については、もう少し後の回で詳しく学んでいく予定だ。
value.pyに対し、更に追加してみよう。
print(8 // 2)
print(int(8 / 2))
どちらも「4」と表示された。
このように、浮動小数点数を整数にする方法はいくつかあるんだ。
逆に、整数を浮動小数点数にするには「float関数」を使用する。
以下をvalue.pyに追加しよう。
print(11 / 2)
print(int(11 / 2))
print(-11 / 2)
print(int(-11 / 2))
print(float(6))
print(float(3 + 3))
結果はこのような形で表示される。
print(11 / 2) → 5.5
print(int(11 / 2)) → 5
print(-11 / 2) → -5.5
print(int(-11 / 2)) → -5
print(float(6)) → 6.0
print(float(3 + 3)) → 6.0int関数はプラスでもマイナスでも、小数部を取り除いた数値が返される。
float関数は数値を渡すと、必ず浮動小数点数で返すんだ。
演算子の優先順位
演算子で計算をする上で、注意しなければならないことがある。
掛け算や割り算は、足し算や引き算よりも先に評価される。
べき乗は掛け算や割り算よりも先に評価される。
つまり、演算子には優先順位が定義されているんだ。
新たにoperations.pyを作成し、次のコードを入力してみよう。
print(10 - 2 * 4)
print(5 + 7 // 3 - 2)
print(20 - 16 / 2 ** 3)
つまり1つめの式は、最初に$${2 * 4}$$ 、次に$${10 - 8}$$が計算されて「2」という答えが出た。
2つめの式は、最初に$${7 // 3}$$、次に$${5 + 2 - 2}$$が計算されて「5」という答えになった。
3つめの式は、最初に$${2}$$ $${\ast \ast}$$ $${3}$$、次に$${16 / 8}$$、最後に$${20 - 2.0}$$が計算されて「18.0」という結果になったんだ。
では、優先順位の低いものから計算したい場合はどうしたらいいんだろう?
その答えは丸括弧だ。
優先的に計算したい部分を丸括弧で囲むことで、優先順位を上げることができる。
以下をoperations.pyに追加しよう。
print((10 - 2) * 4)
print((5 + 7) // (3 - 2))
print(((20 - 16) / 2) ** 3)
先ほどとは異なる結果が出た。
優先順位が入れ替わり、
1つめの式は、$${10 - 2}$$の後に$${8 * 4}$$が計算され
2つめの式は、$${5 + 7}$$と$${3 - 2}$$が先に計算され、その後$${12 // 1}$$が計算された。
3つめの式は、$${20 - 16}$$、$${4 / 2}$$、$${2}$$ $${\ast \ast}$$ $${3}$$の順に計算されたんだ。
なお、べき乗では同じ演算子で計算しても、右側から優先して計算される。
以下をoperations.pyに追加しよう。
print(3 ** 1 ** 2)
print((3 ** 1) ** 2)
print(3 ** (1 ** 2))
つまり、$${3}$$ $${\ast \ast}$$ $${1}$$ $${\ast \ast}$$ $${2}$$は、$${3}$$ $${\ast \ast}$$ $${(1}$$ $${\ast \ast}$$ $${2)}$$として計算されるため、$${3}$$ $${\ast \ast}$$ $${1 = 3}$$となる。
これを《右に結合する》というよ。
また、割り算では同じ演算子で計算すると、左から優先して計算される。
以下をoperations.pyに追加しよう。
print(12 / 6 / 2)
print((12 / 6) / 2)
print(12 / (6 / 2))
つまり、$${12 / 6 / 2}$$は、$${(12 / 6) / 2}$$として計算されるため、$${2.0 / 2 = 1.0}$$となる。
これを《左に結合する》というよ。
コメント
コメントとは、プログラムとして実行されない、人間向けのメモを記載する場所のことだ。
例えば難しい処理を書いたとき、後からその部分を見返しても、プログラムだけでは理解に時間が掛かったり、間違った解釈をしてしまうことがある。
そういう内容を文章として書いておけば、後でどんな処理だったのかをすぐに理解することができる。
そんな時にコメントを使うんだ。
Pythonでは「#」以降が行コメントとして扱われる。
新たにcomment.pyを作成し、次のコードを入力してみよう。
print(5 * 5 * 3.14) # 直径10cmの円の面積
ソースコード内に記載した「直径10cmの円の面積」が、プログラムに影響を与えていないことが分かる。
また、PythonにはC言語やJavaにおける「/* */」のような、専用の複数行コメントは存在しない。
シングルクォート3つ(''')や、ダブルクォート3つ(""")で囲んだ複数行文字列を、複数行コメントのようにして扱うことが多い。
以下をcomment.pyに追加しよう。
"""
ここはダブルクォートの複数行文字列
複数行コメントのように扱われることが多い
"""
print((5 * 5 * 3.14 * 20) / 3)
'''
ここはシングルクォートの複数行文字列
底の半径5cm、高さ20cmの円錐の体積を求めた
'''
または、行コメントである「#」を複数にわたって記載することで、代用することもできる。
なお、Pythonに限らず、ソースコードにコメントを入れる場合は以下の注意が必要となる。
コメントを入れすぎて、見通しの悪いソースコードにならないこと
コメントの内容とプログラムの処理に相違がないこと
過ぎたるは及ばざるが如し。
過度なコメントは混乱を招きかねない。
ソースコード自身がプログラムの意味を表すように書くことが、分かりやすいプログラム開発の第一歩なんだ。
まとめ
今回はプログラムの基本的な部分である四則演算と、コメントの書き方について学んでいった。
個人的な感想としては、四則演算は他のプログラム言語とそんなに違いはないけれど、複数行文字列によるコメント代用は、Python独特の書き方だなと思った。
Pythonの学習はまだまだ始まったばかり。
次回は変数とコンソールからの入出力を使って、円錐の体積を求めるプログラムを作ってみる予定だよ。
無理せず頑張っていこう。
最後まで読んでくださりありがとうございます。
記事が少しでもあなたの心に残ったら、【スキ】で知らせてくれると嬉しいです。
それでは、また!
参考資料
東京大学 - Pythonプログラミング入門
https://utokyo-ipp.github.io/
Python Japan - ゼロからのPython入門講座
https://www.python.jp/train/index.html
