Python 変数と演算子

Python

変数と代入

変数に値を入れるときは「変数名 = 値」と記述します。
変数の名前は自由に決めることができますが、下記に記載したルールがあります。

  • 変数の名前に使用できるのは、英字、アンダースコア「_」、数字です。
  • 特殊記号は使用できません。
  • 最初の文字を数字にすることはできません。
  • 大文字と小文字を区別します。(例:「Apple」と「apple」は別の変数)
  • Pythonのプログラムで特別な意味を持つ名前を付けることはできません。

変数名に使用できない名前

以下の言葉は変数名に使用できません。

asyncelififoryieldassertdelglobalnotwith
asdeffromnonlodalwhileandcontinueforlamdatry
TrueclassfinallyisreturnNonebreakexceptinraise
Falseawaitelseimportpass
変数に使用できない名前一覧

変数名を付けるときの推奨

Pythonの慣例として変数名や関数名は、小文字アルファベット+アンダースコア「_」とすることが推奨されています。

変数使用のプログラム

以下は3人でチョコレートとクッキーとジュースを購入した時の合計金額の計算を変数を使用して実行するプログラムです。

#変数「chocolate」,「cookie」,「juice」に単価を代入して合計金額を計算します。
chocolate = 200
cookie = 150
juice = 180
member = 3
total = (chocolate + cookie + juice) * member
print (total,"円")

実行結果

1590 円

変数を使用した計算がされています。

演算子

計算式に演算子を使用して四則演算を記述することができます。

基本的な演算子

以下の様な基本的な演算子があります。

  記号    意味  
+足し算
引き算
*掛け算
**累乗(〇乗の計算)
/割り算
//割り算(少数点以下切り捨て)
%割り算の余り
基本的な演算子
print("足し算結果 ",1 + 2)
print("引き算結果 ",10 - 5)
print("掛け算結果 ",6 * 4)
print("累乗結果 ",2 ** 4)
print("割り算結果 ",10 / 8)
print("割り算(少数点以下切り捨て)結果 ",10 // 3)
print("割り算の余り結果 ",10 % 3)

実行結果

足し算結果  3
引き算結果  5
掛け算結果  24
累乗結果  16
割り算結果  1.25
割り算(少数点以下切り捨て)結果  3
割り算の余り結果  1

各演算子を使用して計算が実行されています。

代入演算子

代入演算子を使用すると、通常の記述よりも計算式を簡潔に記述することが出来ます。

  記号    意味  通常記述で記載
a += baにbを足すa = a + b
a -= baからbを引くa = a – b
a *= baにbを掛けるa = a * b
a **= baをb乗するa = a ** b
a /= baをbで割るa = a / b
a //= baをbで割る(少数点以下切り捨て)a = a // b
a %= baをbで割った余りa = a % b
代入演算子
a = 2; b = 3
a += b
print("a += b の計算結果 ",a)
a = 2; b = 3
a -= b
print("a -= b の計算結果 ",a)
a = 2; b = 3
a *= b
print("a *= b の計算結果 ",a)
a = 2; b = 3
a **= b
print("a **= b の計算結果 ",a)
a = 2; b = 3
a /= b
print("a /= b の計算結果 ",a)
a = 2; b = 3
a //= b
print("a //= b の計算結果 ",a)
a = 2; b = 3
a %= b
print("a %= b の計算結果 ",a)

実行結果

a += b の計算結果  5
a -= b の計算結果  -1
a *= b の計算結果  6
a **= b の計算結果  8
a /= b の計算結果  0.6666666666666666
a //= b の計算結果  0
a %= b の計算結果  2

代入演算子を使用して計算が実行されています。

単項演算子

他にも以下の様な演算子があります。

  記号    意味    計算例   結果 
+単項プラス+55
単項マイナス-2-2
単項演算子
a = 5
print(+a)
b = 2
print(-b)

実行結果

5
-2

単項演算子を使用して処理が実行されています。

ビット演算子

ビット毎に論理演算を行います。

  記号    意味  
|ビット論理和(OR)
&ビット論理積(AND)
^ビット排他的論理和(XOR)
ビット演算子
#2進数の、「1010」と「0001」のビット論理和(OR)を計算します。
print("ビット論理和(OR) ",bin(0b1010 | 0b0001))

#2進数の、「1011」と「1010」のビット論理積(AND)を計算します。
print("ビット論理積(AND) ",bin(0b1011 & 0b1010))

#2進数の、「1011」と「1010」のビット排他的論理和(XOR)を計算します。
print("ビット排他的論理和(XOR) ",format(0b1011 ^ 0b1010, '04b'))

実行結果

ビット論理和(OR)  0b1011
ビット論理積(AND)  0b1010
ビット排他的論理和(XOR)  0001

ビット論理演算が実行されています。

  記号    意味  
~補数
ビット演算子

補数についての備考
【基数】2進数の基数は2、8進数の基数は8、10進数の基数は10、16進数の基数は16。
【1の補数】1の補数とは、元となる数値の各ビットの0と1を反転した値で、元の数値と足し合わせると、桁上がりを起こさない最大の数値です。 例として「0101」の1の補数は「1010」になる。この2つを足し合わせると「1111」で、ぎりぎり桁上がりを起こしません。
【2の補数】2の補数とは、1の補数に1を加えた値で、元の数値と足し合わせると、桁上がりを起こす最小の数値です。例として「0101」の2の補数は「1011」になります。この2つを足し合わせると「10000」で、ぎりぎり桁上がりを起こします。4ビットまでの計算で考えると最上位は無視して、結果は「0000」になります。
【1の補数の用途】1の補数の用途としては主にビット反転で、画像処理によく使用されます。
【2の補数の用途】2の補数で負数を表す事が可能です(元の数値と足し合わせるとゼロになるので)。コンピュータは引き算の計算であっても、足し算で計算する方が処理が高速なので、一般的には2進数の計算で、引き算処理を足し算処理で実行するために使用されます。

a = 5
b = 2
print("5の2進数表記 ",format(a, '04b'))
print("2の補数 ",~b)
print("5-2= ",a-b)
print(format(0b1001 ^ 0b1111,'04b'))

実行結果

5の2進数表記  0101
2の補数  -3
5-2=  3
0110

10進数で 5-2=3 です。これを2進数で計算する場合は、5に2の補数を足す事で計算できます。
0101 = 5
1101 = -3 (2の”2の補数”)
10010 上記の2進数の足し算をした結果
0010 = 2 (最上位ビットの1を削除)

2進数10進数10進数 2進数10進数10進数
4ビット符号つき整数符号なし整数4ビット符号つき整数符号なし整数
0000001000-88
0001111001-79
0010221010-610
0011331011-511
0100441100-412
0101551101-313
0110661110-214
0111771111-115
4ビット2進数と整数

4桁のビット列をそのまま反転(符号ビット省略)させたい場合は、全ビットが1の値とXOR演算を行って、format()関数で’04b’のように上位ビットがゼロであっても少なくとも4ビット分を表示させるために、ゼロ埋めして取得します。
備考
format(x, ‘04b’) ・・・整数xを4桁の2進数の文字列として出力する(0の後の数字が桁数)

ビットシフト演算子

数値を2進数上で、指定した桁数だけ左や右にずらします。2進数で桁を左にずらすことは数値を2倍にすることを意味し、桁を右にずらすことは数値を半分にすることを意味します。
(参考:10進数で桁をずらすことは数値を10倍や、10分の1にすることを意味する)

  記号    意味  
a << baをbビット左にシフト
a >> baをbビット右にシフト
ビット演算子
print("2ビット左にシフトします。")
x = 6
print("x= ",x)
print("x= ",format(x, '08b'))
y = x << 2 
print("y= ",y)
print("y= ",format(y, '08b'))
print("4ビット右にシフトします。")
x = 24
print("x= ",x)
print("x= ",format(x, '08b'))
y = x >> 4
print("y= ",y)
print("y= ",format(y, '08b'))

実行結果

2ビット左にシフトします。
x=  6
x=  00000110
y=  24
y=  00011000
4ビット右にシフトします。
x=  24
x=  00011000
y=  1
y=  00000001

左シフトした後の空いた最下位のビットには0が充填されます。
右シフトした時に、最下位ビットより右の数値は消滅します。

その他の演算子

  記号    意味    計算例   結果 
=代入a = 10
print(a)

10
>より大きい2 > 3False
>=以上11 >= 5True
<未満5 < 6True
<=以下5 <= 4False
==等しい10 == 10True
!=等しくない5 != 4True
その他演算子
#下記の使用例は演算結果を True,Falseで返します
a = 10
print(a)
print("2 > 3は ",2 > 3)
print("11 >= 5は ",11 >= 5)
print("5 < 6は ",5 < 6)
print("5 <= 4は ",5 <= 4)
print("10 == 10は ",10 == 10)
print("5 != 4は ",5 != 4)

実行結果

10
2 > 3は  False
11 >= 5は  True
5 < 6は  True
5 <= 4は  False
10 == 10は  True
5 != 4は  True

True,Falseで演算結果を返します。

  記号    意味  
and論理積
or論理和
not論理否定
in含まれる(帰属)
not in含まれない
is同一性
is not非同一性
その他演算子
#下記の使用例は演算結果を True,Falseで返します
a = 2; b = 3; c = 7
print("a>b and c>bは ",a>b and c>b)
a = 2; b = 3; c = 7
print("a>b or c>bは ",a>b or c>b)
print("1 == 2は ",1 == 2)
print("1 in [1,4,6]は ",1 in [1,4,6])
print("1 not in [1,4,6]は ",1 not in [1,4,6])
print("7 is 7は ",7 is 7)
print("7 is not 7は ",7 is not 7)

実行結果

a>b and c>bは  False
a>b or c>bは  True
1 == 2は  False
1 in [1,4,6]は  True
1 not in [1,4,6]は  False
7 is 7は  True
7 is not 7は  False

True,Falseで演算結果を返します。「is」や「is not」は SyntaxWarning の警告が発生する場合があるので、「==」や「!=」でもよい場合は、こちらを使用した方がすっきりします。