演算とは
演算子とオペランド
変数を作成してプログラムでデータ加工や計算をすることを演算といいます。どのような演算をするかを決めるための記号を演算子といい、データ型に応じて違います。また演算子でない方を 被演算子(オペランド) といいます。
オペランドの例
「1」「2」がオペランド、「+」が演算子です。
1 + 2
演算子
演算子の種類は「 + 」「 - 」「 * 」「 / 」「 % 」があります。
演算子 | 処理 | 演算 | 結果 |
---|---|---|---|
+ | たし算 | 3 + 2 | 5 |
- | ひき算 | 3 - 2 | 1 |
* | かけ算 | 3 * 2 | 6 |
/ | わり算 | 3 / 2 | 1.5 |
** | 指数 | 3 ** 2 | 9 |
% | 余り | 3 % 2 | 1 |
二項演算
二項演算は四則演算(加減乗除)などで2つの値から新たな値を作成することをいいます。 プログラムでは変数や値が 2つ登場する演算のことをいいます。
ファイル構成
sampleパッケージに ItemCalculateクラスを作成してプログラムを作成しましょう。
sample/
└── calculate.py
数値の二項演算
変数「answer」に 1 + 2 を代入します。
calculate.py
answer = 1 + 2
print(answer)
結果
3
プログラムは右辺から処理する
プログラムの演算式で左辺と右辺がどちらから処理されるか疑問に思うかもかも知れません。プログラム処理は右辺から処理するルールになっています。
変数を再代入
右辺の answer + 3 を処理してから、左辺の answer に再代入します。
answer = answer + 3
print(answer)
結果
6
四則演算
変数を四則演算で計算して、結果を確認します。
calculate.py
answer = 1 + 2
answer = answer + 3
answer = answer - 2
answer = answer * 5
answer = answer / 2
print(answer)
結果
10.0
余り(Mod)を計算して、結果を確認します。
calculate.py
mod = answer % 3
print(mod)
結果
1.0
キャスト(Cast)
キャストとは
通常、データ型の違う値を演算子しようとするとエラーで計算できません。そこで、データ型の違う値の、データ型を変換することをキャストといいます。
str()
str() で値を文字列にキャストできます。
文字列 = str(値)
f
fで値を文字列にキャストできます。
文字列 = f"{変数}"
「price」と「pointRate」の計算の結果(float)を、文字列「pt」と連結して表示してみます。
calculate.py
price = 200
pointRate = 0.05
point = price * pointRate
message = str(point) + "pt"
print(message)
結果
10.0pt
単項演算
単項演算とは
単項演算は1つの変数に対して演算処理し、その結果を変数に再代入します。他の言語では単項演算が利用できますが、Pythonでは単項演算がありません。
演算子 | 読み方 | 処理 | 演算 | 例 |
---|---|---|---|---|
++ | インクリメント | 変数を1増加 | a++ | a = a + 1 |
-- | デクリメント | 変数を1減少 | a-- | a = a - 1 |
以下は、PHPプログラムの単項演算の例です。
PHPの単項演算の例
$amount = 5
# amount に 1 足した結果を amount に代入
$amount++
echo($amount)
# amount から 1 引いた結果を amount に代入
amount--
echo($amount)
結果
6
5
複合演算
複合演算とは
複合演算は、二項演算の計算を省略して書くことができます。= の前に演算子を記述して値を代入します。
複合演算の演算子
演算子 | 読み方 | 処理 | 例 | |
---|---|---|---|---|
+= | たし算 | 変数に2を足す | a += 2 | a = a + 2 |
-= | ひき算 | 変数に2を引く | a -= 2 | a = a - 2 |
*= | かけ算 | 変数に2をかける | a *= 2 | a = a * 2 |
/= | わり算 | 変数を2で割る | a /= 2 | a = a / 2 |
演算例
calculate.py
amount = 0
# amount が1増加
amount += 1
print(amount)
# amount が1減少
amount -= 1
print(amount)
結果
1
0
calculate.py
amount = 0
price = 110
amount += 3
price -= 10
price *= amount
print(price)
結果
300
文字列の複合演算
文字列でも複合演算 += で連結できます。
calculate.py
itemName = "コーヒー"
message = itemName + "の価格は" + str(price) + "円です。"
message += "購入しますか?"
print(message)
結果
コーヒーの価格は300円です。購入しますか?
その他のエラー
オーバーフロー
演算処理でメモリ範囲外の値になると、オーバーフローという状態になります。
- 値が間違っていても、エラーが発生せずに処理されます
2の1000乗
2の1000乗の計算をすると、オーバーフローします。
calculate.py
x = 2 ** 1000
print(x)
計算結果が間違っています。
結果
10715086071862673209484250490600018...
ランタイムエラー(Runtme Error)
数値を0で割るとプログラムは実行できますが、計算できません。
ランタイムエラー
price = 100
amount = 0
average = price / amount
print(average)
プログラムを実行すると、ZeroDivisionError で終了します。
結果
Traceback (most recent call last):
File "/Users/yoo/projects/python_samples/sample/calculate.py", line 58, in <module>
average = price / amount
~~~~~~^~~~~~~~
ZeroDivisionError: division by zero
演習
問題1
hpがいくつになるか確認してみましょう。
int hp = 5
hp += 1
hp -= 4
hp *= 4
hp /= 2
問題2
以下の変数を使って「○○の年齢は○○歳です。」とコンソール表示してみましょう。
user_name
age
問題3
- ミネラルウォーター:88円 x 5個
- コーヒー:120円 x 3個
- 割引:10%
の合計金額を計算してみましょう。
問題4
標準入力の関数 input() を利用して、「国語」「数学」「理科」「社会」を変数に代入し、総得点と平均点計算してみましょう。
国語:
数学:
理科:
社会:
標準入力のメッセージは以下のようにします。
data = input("国語:")