05-Python

Python(Part.3)| python【算術演算子】

python| まとめ | 現役エンジニア&プログラミングスクール講師「python」のまとめページです。pythonに関して抑えておきたい知識や文法やにについて記事をまとめています。まとめページの下部には「おすすめの学習書籍」「おすすめのITスクール情報」「おすすめ求人サイト」について情報を掲載中...

目標

「演算子」と「被演算子」について理解する。
「演算子と式の優先度」について理解する。

Pythonの基礎(演算子)

「プログラミングの学習」では「変数」や「制御構造」または「クラス」などが思い浮かびますが、それらの学習の前に必要となるのがプログラムで利用される「記号」の知識です。この「記号」について知ることで、プログラミング学習をよりスムーズにすることができます。

この記事(Python (Part.3))では「演算子」と「被演算子」について「算術演算子」を扱いながら学習します。

「演算子」と「被演算子」

「演算子の利用」

「演算子」を学習する前に「インタラクティブシェル(python console)」に次のように入力します。計算結果が返ってきているのが確認できます。

「演算子」

「演算子」とは、四則演算(足し算・引き算・掛け算・割り算など)や値の比較、値の法則を求める論理などで利用される「記号」のことです。「演算子」には以下の種類があります。「演算子」は「operator(オペレーター)」ともいいます。

演算子用途
算術演算子四則演算を行うため
比較演算子値を比較して真偽値を返すため
論理演算子値の法則を導くため
連結演算子(結合演算子)文字列と文字列を結合するため
※ pythonでは数値と文字列の結合には利用できない

「算術演算子」

算術演算子には「加算」「減算」「乗算」「除算」「剰余」「累乗」などがあります。

算術演算子意味
+左右の値を加算します。(加算)
左右の値を減算します。(減算)
*左右の値を乗算します。(掛け算)(乗算)
/左右の値を除算します。(割り算)(除算)
//左右の値を除算して「商」を求めます。(切り捨て除算)
%左右の値を除算して「余り」を求めます。(剰余)
**左の値を右の回数累乗します。(累乗)

「べき乗」と「累乗」には違いがあります。この記事では同じ数を複数回掛け合わせるという意味で「累乗」としています。

「被演算子」

「被演算子」とは演算の対象となる「値」のことです。これを「operand(オペランド)」ともいいます。「被演算子」は次の部分となります。

「演算子と式の優先度」

「演算子」には優先度があり、優先度の異なる演算子や式が並んだ場合には優先度の高い演算を先に行うようになっています。単純な計算を行う演算でよく利用されるのは「1」の式結合、「4」から「7」の算術演算子、「18」の代入文(文法上は演算子ではありません)です。

下の表で優先度は「1」が最も高く、「18」が最も低い。

優先度「1」にある()は括弧式や式結合と呼ばれます。タプル表記としていますが、タプルは丸括弧内で「,」が利用されて初めてタプルを生成します。タプルを生成しない場合は演算処理で利用される式の役割をします。

優先度「18」の「=」は代入文です。演算子ではありません。pythonでは「+=」や「-=」は累算代入演算子と呼ばれますが、演算子ではありません。

優先度演算子意味
1() 、[]、
{key: value}、{}
式結合(タプル表記)、リスト表記、
辞書表記、集合表記
2x[n]、x[n:m]、
x(args *kwargs) x.attr
インデックス、スライス、
関数呼び出し、属性参照
3await 式await 非同期(処理の一時停止)
4**累乗
5+x、-x、~x正の数(単項+)、負の数(単項-)、ビット反転
6*、/、//、%、@乗算、除算、切り捨て除算、剰余、行列乗算
7+、-加算、減算
8<<、>>シフト演算(左シフト、右シフト)
9&ビット論理積(AND)
10^ビット排他的論理和(XOR)
11|ビット和(OR)
12in、not in、is、is not、
>、>=、<、<=、!=、==、<>
比較(帰属性判定、同一性判定、値比較)
13not x論理否定(NOT)
14and論理積(AND)
15or論理和(OR)
16if … elif … else条件
17lambdaラムダ
18=:=代入文、代入式
※ 文法上は演算子ではありません

例えば次のような計算を行う場合、演算の順番は次のように変化します。

まず、大前提として、プログラムは「上から下へ」そして「左から右へ」読まれていきます。下の式の場合は、プログラムは一行なので左から順番に読まれていきます。

順番として「answer」が読まれ、「=」が読まれます。この時、代入文の「=」が読まれます。そうすると次の被演算子「6」と次の演算子「+」までを読み取り、「=」と「+」の優先度を比べます。

answer = 6 + 7 – 5 * (-4) * (4 + 6 / 3) + 5

ふたつの演算子の優先度から「+」が優先される演算なので、さらに次の演算子まで読まれます。

answer = 6 + 7 – 5 * (-4) * (4 + 6 / 3) + 5

「+」と「-」は優先度が同じなので6+7が処理されます。

「+」や「-」ように左の演算が先に行われる演算子を左結合と呼びます。
累乗「**」や「=」は右結合となっています。

式は次のように変化してさらに右側を読んでいきます。今度は「-」と「*」で優先度を比較します。「*」の方が優先度が高いので計算は後ろへ移動します。

answer = 13 – 5 * (-4) * (4 + 6 / 3) + 5

続けて括弧式が読まれます。括弧式の中では負の数を表す式が入っています。その後、演算子まで読まれます。

answer = 13 – 5 * (-4) * (4 + 6 / 3) + 5

同じ優先度の「*」があるので、この前までが処理されます。

answer = 13 – (-20) * (4 + 6 / 3) + 5

更に右側を読んでいきます。

answer = 13 – (-20) * (4 + 6 / 3) + 5

()括弧式があるのでこの中の計算が優先されます。

answer = 13 – (-20) * (4 + 6 / 3) + 5

「+」と「/」では「/」の方が優先度が高いので、こちらに処理が移されます。

answer = 13 – (-20) * (4 + 6 / 3) + 5

括弧内の計算が行われます。

answer = 13 – (-20) * (4 + 2.0) + 5

次の「+」まで読まれます。「*」の方が優先度が高いためこちらが処理されます。

answer = 13 – (-20) * (6.0) + 5

answer = 13 – (-120.0) + 5

「-」と「+」は優先度が同じため「-」が処理されます。

answer = 13 – (-120.0) + 5

answer = 133.0 + 5

更に右側を読みます。

answer = 138.0

最後に優先度の最も低い代入文が処理され「変数」と「値」が紐づけられます。

プログラミングでは「変数」を「箱」と例えることが多いですが、pythonでは「紐づける」「参照」などがあたります。

今回は以上になります。

「python」おすすめ書籍 ベスト3 | 現役エンジニア&プログラミングスクール講師「python」の学習でお勧めしたい書籍をご紹介しています。お勧めする理由としては、考え方、イメージなどを適切に捉えていること、「生のpython」に焦点をあてて解説をしている書籍であることなどが理由です。勿論、この他にも良い書籍はありますが、特に質の高かったものを選んで記事にしています。ページの下部には「おすすめのITスクール情報」「おすすめ求人サイト」について情報を掲載中。...

ブックマークのすすめ

「ほわほわぶろぐ」を常に検索するのが面倒だという方はブックマークをお勧めします。ブックマークの設定は別記事にて掲載しています。

「お気に入り」の登録・削除方法【Google Chrome / Microsoft Edge】「お気に入り」の登録・削除方法【Google Chrome / Microsoft Edge】について解説している記事です。削除方法も掲載しています。...
【パソコン選び】失敗しないための重要ポイント | 現役エンジニア&プログラミングスクール講師【パソコン選び】失敗しないための重要ポイントについての記事です。パソコンのタイプと購入時に検討すべき点・家電量販店で見かけるCPUの見方・購入者が必要とするメモリ容量・HDDとSSDについて・ディスプレイの種類・バッテリーの持ち時間や保証・Officeソフト・ウィルス対策ソフトについて書いています。...
RELATED POST