テクノロジー
2022年12月20日Python入門1 簡単な計算
簡単な計算が行えるようになる
簡単な計算を行う
計算はプログラミングの基本的な構成要素のひとつであり、さまざまな場面で利用されます。ここでは頻繁に利用することになる四則演算(加減乗除)などの扱い方を見ていきます。同時に、数字に関するデータ型についても学びます。
《Pythonのバージョンについて》
Pythonには2系(Python2)と3系(Python3)の2つの系統が存在しており、若干の違いがあります。ディープロでは3系の使用を前提として扱っていきます。
足し算
足し算を行う際は、+を使います。
以下は『「1 + 2」の結果を表示する』というプログラムです。
print(1 + 2)
実行すると「3」が表示されます。
3つ以上の値を足し合わせることも可能です。
print(250 + 100 + 400)
pic2
実行すると「750」が表示されます。
《print関数について》
print()の括弧の中に数値を入れることで、その数値を表示させることができます。Pythonにはこのように関数と呼ばれる機能が用意されています。
なお、Jupyter Notebook (Colab)ではprint関数を使わなくても1文だけであれば表示させることができますが、ディープロのサンプルコードはprint関数を使ったものを載せていきます。
引き算
引き算を行う際は、-を使います。
print(15 - 3)
実行すると「12」と表示されます。
これ以降は重要な場合を除き、実行結果の画像は掲載しません。コードを実行して結果を確認していきましょう。
足し算と引き算を組み合わせることも可能です。また、結果が負の数になる計算も可能です。
print(54 + 21 - 105)
実行すると「-30」と表示されます。
負の数を扱う場合にも-
を使います。
print(-30 - 40)
実行すると「-70」と表示されます。
掛け算
掛け算を行う際は、*
を使います。日常的には×ですが、Pythonでは*
を使います。
print(7*9)
実行すると「63」と表示されます。
割り算
割り算を行う際は/を使います。日常的には÷ですが、Pythonでは/を使います。
print(50/4)
実行すると「12.5」と表示されます。このように小数も扱うことが可能です。
print(50/2)
実行すると「25.0」と表示されます。整数同士の割り算であっても、小数部を持った値が返ります。.0なので、ちょうど割り切れていることが分かります。
次に、割り切れない計算を試してみます。
print(50/3)
実行すると「16.666666666666668」と表示されます。本来は割り切れない計算であり、「16.666…」と続きますが、このように有限の値が返ってきます。そのため、誤差があることは気にかけておく必要があります。
割り算にはもう一種類のやり方が存在します。小数点以下を切り捨てる割り算で、この際は//を使います。
print(50//3)
実行すると「16」と表示されます。
この時の余りを求める際は%を使います。
print(50%3)
実行すると「2」と表示されます。
結果が負になる場合の//を考えると、切り捨ての向きを確認しておく必要があります。例えば「-1.5」が「-1」になるか「-2」になるかです。
単に切り捨てと言った場合は「-1.5」を「-1」にする操作を指すことが多いですが、Pythonの//は「-1.5」を「-2」にします。正も負も、値を減らす向きに動きます。
print(-3//2)
実行すると「-2」と表示されます。結果が複数考えられる操作に対しては、どのような仕様になっているかを注意するようにしましょう。
《0で割るとどうなる?》
「0で割る」は算数では「やってはいけない」という風に扱われる、気をつけなければいけない操作です。試してみましょう。
*以下はエラーになる例です。
print(2/0)
実行すると、以下のような エラーメッセージ が表示され、プログラムが止まります。
pic3
print(2.0/0)
やprint(2/0.0)
の場合もエラーメッセージが表示されます。
《エラーメッセージを読む》
0で割った場合のように、エラーメッセージが表示されることはプログラミングを行う上で多々あります。
エラーメッセージに出会うことは一見嫌なことですが、「間違えて0で割るとランダムな値が返ってくる」のような、厄介な動作をされるよりは良いとも捉えられます。
そして、このメッセージではprint(2/0)
に対して、ZeroDivisionError
(ゼロで割っているエラー)によりプログラムを止めたということを分かりやすく教えてくれています。
エラーメッセージはコンピュータや機能の作者が、間違いを教えてくれているということなので、落ち着いてを確認する習慣をつけましょう。
べき乗
四則演算ではありませんが、べき乗も簡単に扱うことができます。べき乗は**を使います。
print(2**3)
実行すると「8」と表示されます。print(222)と同じ計算です。
ルートの計算も可能です。ルート2は、2の0.5乗です。
print(2**0.5)
実行すると「1.4142135623730951」と表示されます。ルート2は無理数ですが、50/3
と同様に有限の値が返ってきます。
データ型
計算を行う中で整数と小数が登場しました。プログラミングをする上ではこれらの データ型 の違いを意識する必要があります。
整数型と浮動小数点数型
コンピュータは限られた記憶容量の中で値を保存するため、小数部を持つ数を 浮動小数点方式 という日常での小数とは異なる考え方で扱っています。この方式による数を、 浮動小数点数 と呼びます。
浮動小数点数は整数とは異なるものなので、プログラミングをする上でも区別することになります。Pythonではそれぞれの値を整数型(int)、浮動小数点数型(float)と呼び分けます。intはinteger(整数)から、floatはfloating point(浮動小数点)から来ています。それぞれ単に整数や浮動小数点数、int型やfloat型という風に呼ばれることも多いです。
なお、複素数を扱うための複素数型(complex)も存在しますが、ここでは扱いません。これらをまとめて 数値型 と呼ぶこともあります。
type関数を使い、ここまで計算した値の型を確認してみます。以下は『「7*9」の結果の値がどういった型かを表示する」というプログラムです。
print(type(7))
print(type(9))
print(type(7*9))
実行すると「<class ‘int’>」「<class ‘int’>」「<class ‘int’>」と表示されます。すべて整数型であることを示しています。7*9=63ですべて整数です。
割り算を見てみます。
print(type(50))
print(type(4))
print(type(50/4))
実行すると「<class ‘int’>」「<class ‘int’>」「<class ‘float’>」と表示されます。50/4=12.5ですから、整数割る整数で小数になっています。
さらに、割り切れる割り算も見ておきます。
print(type(50/2))
実行するとこちらも「<class ‘int’>」「<class ‘int’>」「<class ‘float’>」と表示されます。50/2=25.0で、割り切れる数も小数点以下に.0がつく浮動小数点数型です。Pythonで整数型同士の割り算を行うと、結果は必ず浮動小数点数型になります。
《浮動小数点数型の表記方法》
浮動小数点数型は以下のように、0を省略した書き方が可能です。
print(2.0)
print(2.)
print(0.5)
print(.5)
実行すると、「2.0」「2.0」「0.5」「0.5」となります。
《他のプログラミング言語との違い》
C言語など他のプログラミング言語では、整数同士の割り算の場合、小数点以下は切り捨てられ整数になる例が多いです。Pythonの場合もバージョン2(Python2)まではそのような仕組みでした。しかし、現在主流のPython3では小数が返ってきます。これは、整数型で割り算をする時に、自動的に浮動小数点数型に変換しているということになります。
データ型や割り算に関してはプログラミング言語によって差が大きいため、他の言語を利用したことがある方は違いに気をつける必要があります。
型の変換
計算時に自動的に型が変わることが分かりましたが、float関数やint関数を用いることで、変換を明示的に行うこともできます。
以下は「2を浮動小数点数型に変換して表示する」というプログラムです。
print(float(2))
print(type(float(2)))
実行すると「2.0」「<class ‘float’>」と表示されます。
逆に、浮動小数点数型を整数型に変換してみます。
print(int(3.7))
実行すると「3」「<class ‘int’>」と表示されます。小数部は切り捨てられます。
《浮動小数点数型にfloat関数を使うとどうなる?》
もし、浮動小数手数型の値、例えば2.0に対してfloat関数を使った場合はどのようになるでしょうか。
2パターンの予想ができます。
- 既に浮動小数手数型の2.0なので、そのまま表示される
- 変換ができないのでエラーメッセージが出る
コードを書いて試してみます。
print(float(2.0))
print(type(float(2.0)))
実行すると「2.0」「<class ‘float’>」が表示されます。1パターン目の予想が正解でした。
これは一見当たり前の動作ですが、float関数は整数型を浮動小数点数型に変換するだけではなく、浮動小数点数型であればそのまま浮動小数点数型を返すという風に作られているということです。
もし2パターン目の予想の作りになっていた場合、気をつけないとエラーでプログラムが動かないということがありえました。
今後Pythonを使っていく中で新しい機能に出会った場合は、「こう使ったらどういう動作をする作りだろう?」という視点を持つようにしましょう。また、今後自ら新しい機能を作っていく場合は、「こういう使われ方をすることもないだろうか?」と考えるようにしましょう。
計算の優先順位
ここまで見てきた+
、-
、*
、/
などの記号を 演算子 と呼びます。この演算子には優先順位があります。
4種類の演算子を使ったコードを試してみます。
print(3 + 5*4 - 10/2)
実行すると「18.0」と表示されます。*や/が+や-より先に計算されるという、算数や数学の計算と同じ考え方です。
《演算子を使う際のスペースの入れ方》
ここまでのサンプルコードでは、足し算や引き算の際は両側にスペースを空けていました。一方で掛け算や割り算ではスペースを空けていませんでした。これは計算を見やすくするための工夫であり、実行結果には影響を与えません。
先ほどのコードからスペースを抜いても、計算結果は変わりません。
print(3+5*4-10/2)
実行すると「18.0」と表示されます。
優先順位が異なる演算子を同時に使う場合は、優先順位が低い演算子の両側にスペースを空けて書かれることが多いです。厳密な決まりはなく、見やすく書くことが大切です。ただし、片側だけにスペースを入れたり、2つ以上のスペースを続けることは絶対に避けてください。
こういった書き方については、PEP8というドキュメントによって公式に説明されています。PEP8に従った書き方を目指すようにしましょう。
はじめに — pep8-ja 1.0 ドキュメント
はじめに — pep8-ja 1.0 ドキュメント
括弧の使い方
計算の優先順位を変更したい場合は、括弧()を使います。括弧で囲われている範囲が先に計算されます。
print((3+5) * 4 - 10/2)
実行すると「27.0」と表示されます。3 + 5が5*4より先に計算されたためです。
括弧を含む場合はスペースの入れ方が決めにくいですが、(3 + 5)*4よりも(3+5) * 4の方が良いと言われています。括弧の中の方が優先順位が高いため、スペースを入れずに書きます。
組み込み関数
このテキストではprint関数、type関数、float関数、int関数が登場しました。このようにPythonにはじめから用意されている関数は、 組み込み関数 と呼ばれます。
公式ドキュメントを見てどのような名称のものがあるか見ておいても良いでしょう。ただし、学びはじめの段階で組み込み関数を暗記したり、たくさん知っておく必要はありません。
組み込み関数 — Python 3.7.3 ドキュメント
公式ドキュメントの使い方に慣れるため、ひとつ読んでみます。例えば1番目のabs関数はここまでの知識で扱うことができます。
`数の絶対値を返します。引数は整数または浮動小数点数です。引数が複素数なら、その絶対値 (magnitude) が返されます。`
引数 とは、括弧の中に入れる値のことです。
print(abs(-3))
実行すると「3」と表示されます。「abs関数に引数-3を渡すと、その絶対値である3が返ってきた」と言えます。
なお、整数型や浮動小数点数型ははじめから用意されている型なので 組み込み型 と呼ばれます。他に文字列(str)やリスト(list)などがあり、これらは以降のテキストで学んでいきます。
参考文献
3.1. Python を電卓として使う — Python 3.7.3 ドキュメント
数値型 int, float, complex — Python 3.7.3 ドキュメント
端数処理 - Wikipedia