変数と代入
変数に値を入れるときは「変数名 = 値」と記述します。
変数の名前は自由に決めることができますが、下記に記載したルールがあります。
- 変数の名前に使用できるのは、英字、アンダースコア「_」、数字です。
- 特殊記号は使用できません。
- 最初の文字を数字にすることはできません。
- 大文字と小文字を区別します。(例:「Apple」と「apple」は別の変数)
- Pythonのプログラムで特別な意味を持つ名前を付けることはできません。
変数名に使用できない名前
以下の言葉は変数名に使用できません。
async | elif | if | or | yield | assert | del | global | not | with |
as | def | from | nonlodal | while | and | continue | for | lamda | try |
True | class | finally | is | return | None | break | except | in | raise |
False | await | else | import | pass |
変数名を付けるときの推奨
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 += b | aにbを足す | a = a + b |
a -= b | aからbを引く | a = a – b |
a *= b | aにbを掛ける | a = a * b |
a **= b | aをb乗する | a = a ** b |
a /= b | aをbで割る | a = a / b |
a //= b | aをbで割る(少数点以下切り捨て) | a = a // b |
a %= b | aを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
代入演算子を使用して計算が実行されています。
単項演算子
他にも以下の様な演算子があります。
記号 | 意味 | 計算例 | 結果 |
---|---|---|---|
+ | 単項プラス | +5 | 5 |
– | 単項マイナス | -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ビット | 符号つき整数 | 符号なし整数 | |
0000 | 0 | 0 | 1000 | -8 | 8 | |
0001 | 1 | 1 | 1001 | -7 | 9 | |
0010 | 2 | 2 | 1010 | -6 | 10 | |
0011 | 3 | 3 | 1011 | -5 | 11 | |
0100 | 4 | 4 | 1100 | -4 | 12 | |
0101 | 5 | 5 | 1101 | -3 | 13 | |
0110 | 6 | 6 | 1110 | -2 | 14 | |
0111 | 7 | 7 | 1111 | -1 | 15 |
4桁のビット列をそのまま反転(符号ビット省略)させたい場合は、全ビットが1の値とXOR演算を行って、format()関数で’04b’のように上位ビットがゼロであっても少なくとも4ビット分を表示させるために、ゼロ埋めして取得します。
備考
format(x, ‘04b’) ・・・整数xを4桁の2進数の文字列として出力する(0の後の数字が桁数)
ビットシフト演算子
数値を2進数上で、指定した桁数だけ左や右にずらします。2進数で桁を左にずらすことは数値を2倍にすることを意味し、桁を右にずらすことは数値を半分にすることを意味します。
(参考:10進数で桁をずらすことは数値を10倍や、10分の1にすることを意味する)
記号 | 意味 |
---|---|
a << b | aをbビット左にシフト |
a >> b | aを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 > 3 | False |
>= | 以上 | 11 >= 5 | True |
< | 未満 | 5 < 6 | True |
<= | 以下 | 5 <= 4 | False |
== | 等しい | 10 == 10 | True |
!= | 等しくない | 5 != 4 | True |
#下記の使用例は演算結果を 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 の警告が発生する場合があるので、「==」や「!=」でもよい場合は、こちらを使用した方がすっきりします。