【Python】「数値型」と「四則演算」を丁寧に解説(練習問題あり)

Pythonプログラミングの基本を学ぶうえで重要な「数値型」と「四則演算」について、初心者でも理解しやすいようにRPGの世界観を使って詳しく解説します。

「数値型」とは

「数値型」とは、数値を扱うためのデータ型です。Pythonで使える主な数値型は以下の2つです。

型名 説明
int 整数型(小数点なしの数値) 120 (HP)
float 浮動小数点数型(小数ありの数値) 3.5 (魔法の威力)
なぜ魔法の威力は小数(float型)で表されるのでしょうか?たとえば、攻撃魔法ごとに「魔法の威力」が設定され、キャラクターには「魔法攻撃力」というステータスがあるとします。
このとき、攻撃力の計算式が「攻撃力 = 魔法の威力 × 魔法攻撃力」となる場合、魔法の威力を「3.5」といった小数で表現することで、ゲームバランスの微調整がしやすくなります。
もし整数だけで表現すると、「1倍」「2倍」など強さの段階が大ざっぱになり、「魔法の威力は、ちょっと強く、ちょっと弱く…」といった細かな調整が難しくなってしまいます。

Pythonでは、数値型リテラルを変数に代入するだけで自動的に型が決まります(動的型付け)。

# int型(HP)
hero_hp = 120

# float型(魔法の威力)
magic_power = 3.5
プログラムの中に「そのまま直接書かれた数値」のことを数値型リテラルといいます。上記のコードだと、「120」や「3.5」が「数値型リテラル」です。つまり、変数や関数を使わずに、数字をそのまま書いたものです。

なお、負の数には「 -5」「-0.5」というように、数値の前にマイナス(-)をつけます。

# int型(毒による「HP」の毎ターンの減少量)
poison_damage = -5

# float型(デバフによる「魔法の威力」の減少量)
debuff_rate = -0.5

「四則演算」とは

四則演算(しそくえんざん)とは、数学やプログラミングの基本となる4つの計算方法(足し算、引き算、掛け算、割り算)のことです。Pythonでは、以下の演算子を使って四則演算ができます。

演算子 意味 結果
+ 足し算(和) 5 + 3 8
- 引き算(差) 10 - 4 6
* 掛け算(積) 7 * 2 14
/ 割り算(商) 8 / 2 4.0(float型)
演算子(えんざんし)とは、プログラムの中で「計算や操作をするための記号」のことです。

各演算子の使い方を、次のサンプルコードで理解していきましょう。

足し算

以下のコードは、所持金の計算を足し算で行います。

# 所持金
gold = 100 

# ボーナス
bonus = 50 

# 新しい所持金 = 所持金 + ボーナス
new_gold = gold + bonus 

# 新しい所持金の表示
print("所持金は", new_gold, "Gになりました") 
所持金は 150 Gになりました
Pythonの print() 関数では、複数の値をカンマ , で区切って並べることで、「所持金は 150 Gになりました」というように、値と値の間に自動的にスペースを入れて表示してくれます。
また、カンマで区切ることで、数値型リテラルや数値型の変数をそのまま渡せます( str() 関数で文字列型に変換しなくてもOK)

引き算

以下のコードは、戦闘ダメージの計算を引き算で行います。

# 攻撃力
attack = 50  

# 防御力
defense = 20 

 # ダメージ = 攻撃力 - 防御力
damage = attack - defense

# 結果を表示
print("受けたダメージは", damage)
受けたダメージは 30

掛け算

以下のコードは、購入アイテムの合計金額の計算を掛け算で行います。

# アイテムの金額
price = 120 

# 購入数
quantity = 3 

# 合計金額 = アイテムの金額 ✖️ 購入数
total_price = price * quantity 

# 結果を表示
print("合計金額は", total_cost, "Gです") 
合計金額は 360 Gです

割り算

以下のコードは、パーティーメンバー1人あたりの経験値の計算を割り算で行います。

# 経験値の合計
total_exp = 300 

# パーティーの人数
party_members = 4 

# パーティーメンバー1人あたりの経験値 = 経験値の合計 ÷ パーティーの人数
exp_per_member = total_exp / party_members 

# 結果を表示
print("1人あたりの経験値は", exp_per_member)
1人あたりの経験値は 75.0

べき乗

Pythonでは ** 演算子を使ってべき乗を計算できます。
以下のコードは、バフを得た後の魔法攻撃力の計算を割り算で行います。

# 魔法攻撃のバフ
magic_buff = 3 

# 魔法攻撃力
magic_power = 2 

# 新しい魔法攻撃力(2の3乗)
new_magic_power = magic_power ** magic_buff  

# 結果を表示
print("新しい魔法攻撃力は", new_magic_power)
新しい魔法攻撃力は 8

余り(剰余)

Pythonでは % 演算子を使って割り算の余り(剰余)を計算できます。
以下のコードは、袋に入りきらないコインの枚数の計算を割り算で行います。

# 今持っているコインの枚数
coins = 17

# 袋1つに入るコインの最大枚数
pouch_capacity = 5

# 持っている袋の数
pouch_number = 3

# 袋に入る合計枚数(1袋の容量 × 袋の数)
total_capacity = pouch_capacity * pouch_number

# 袋に入りきらないコインの枚数(余り)
leftover = coins % total_capacity

# 結果を表示
print("袋に入りきらないコインは", leftover, "枚")
袋に入りきらないコインは 2 枚

四則演算の優先順位

Pythonでは、以下のような順番で演算が優先されます。

優先度 演算子 内容
最優先 () 括弧(グループ化) (2 + 3) * 4 = 20
** べき乗(右から左) 2 ** 3 = 8
* / // % 掛け算・割り算・切り捨て・余り 10 / 2 = 5.0
+ - 足し算・引き算 5 + 3 = 8

同じ優先度の演算子は「左から右」へ処理されます。(べき乗 ** だけは右から左)
コードをいくつか見ながら理解を深めましょう。

例1:掛け算と足し算

# 先に 3 * 4 → 12、その後 5 + 12 → 17
result = 5 + 3 * 4

例2:括弧は最優先

# 括弧が最優先 → 8 * 4 → 32
result = (5 + 3) * 4

例3:掛け算と足し算

掛け算が足し算より先に計算されます。

result = 2 + 3 * 4
print(result)  # 出力: 14(3×4=12 → 2+12=14)

例4:括弧で優先順位変更

例3を括弧で順番を変えます。

result = (2 + 3) * 4
print(result)  # 出力: 20(2+3=5 → 5×4=20)

例5:べき乗は特殊

べき乗は最優先(ただし、右から左)です。

result = 2 ** 3 ** 2
print(result)  # 出力: 512(3**2=9 → 2**9=512)

例6:割り算と余り

割り算と余りの組み合わせです。

result = 10 / 2 + 5 % 3
print(result)  # 出力: 6.0(10/2=5.0 → 5.0+2=7.0)

例7:整数除算と引き算

整数除算と引き算の組み合わせです。

result = 20 // 3 - 2
print(result)  # 出力: 4(20//3=6 → 6-2=4)

例8:括弧で複雑な式を整理

括弧で複雑な式を整理すると、ミスが起きにくいです。

result = (10 + 2) * (8 - 3) / (2 + 1)
print(result)  # 出力: 20.0(12×5=60 → 60/3=20.0)

「整数型」と「浮動小数点数型」の四則演算

「整数型」と「浮動小数点数型」の演算は可能ですが、結果の型は「浮動小数点数型」になるので、注意しましょう。

# 勇者のレベル(int型:整数型)
level = 5      

# レベル増加分(float型:浮動小数点数型)
level_up = 1.0    

# 新しいレベルの計算(新しいレベル = 勇者のレベル + レベル増加分)
new_level = level + level_up

# 新しいレベルの表示
print("勇者のレベルは、", new_level, "に上がった!")  
print(type(new_level)) # データ型の表示
勇者のレベルは、 6.0 に上がった!
<class ‘float’> ← float型になる

「文字列」と「数値型」の四則演算

以下のように「文字列」と「数値型」を混ぜて計算すると、エラーになります。

# 勇者のレベル(文字列型:str)
level = "5"  

# レベル増加分(整数型:int) 
level_up = 1  

# 新しいレベル = 勇者のレベル + レベル増加分 ← ❌エラー
new_level = level + level_up 

# 結果を表示
print("勇者のレベルは、", new_level, "に上がった!")  
Traceback (most recent call last):
File “main.py”, line 6, in
new_level = level + level_up
~~~~~~^~~~~~~~~~
TypeError: can only concatenate str (not “int”) to str

❌ TypeError:strとintは足せない

「数字っぽい文字列」は、以下のように `int()` 関数で整数型、 `float()`関数 で浮動小数点数型に変換できます。

以下のコードは、 int() 関数で文字列型を整数型に変換することでエラーを解消した例です。

# 勇者のレベル(文字列型:str)
level = "5"   

# レベル増加分(整数型:int)
level_up = 1  

# 新しいレベル = 勇者のレベル + レベル増加分 ← ⭕️ int同士になるので、足し算できる
new_level = int(level) + level_up 

# 結果を表示
print("勇者のレベルは、", new_level, "に上がった!")  # 新しいレベルの表示
勇者のレベルは、 6 に上がった!
`str()`関数を使うことで数値型を文字列型に変換することができます。ただし、文字列型の変数同士を足し算すると「文字列の結合」になります。

以下のコードは、 str() 関数で整数型を文字列型に変換した例です。

# 勇者のレベル(文字列型:str)
level = "5"   

# レベル増加分(整数型:int)
level_up = 1  

# 新しいレベル = 勇者のレベル + レベル増加分 ← str同士になるので、「文字列の結合」になってしまう
new_level = level + str(level_up) 

# 結果を表示
print("勇者のレベルは、", new_level, "に上がった!")  # 新しいレベルの表示
勇者のレベルは、 51 に上がった!

※「5」と「1」という2つの文字列が連結され、「51」となります

練習問題(基礎固め & 資格勉強用)

Pythonの「数値型」と「四則演算」について、基礎理解を深めるための練習問題です。Python 3 エンジニア認定基礎試験や基本情報技術者試験の対策にも活用できます。

【問題1】数値型の基本

次のうち、Pythonで「浮動小数点数」を表す型はどれか。

A. int
B. float
C. str
D. bool


正解:B
解説:float型は小数点を含む数値を扱うための型です。
例:magic_power = 3.5(魔法の威力)

【問題2】型の自動判定

次のコードの変数 hero_hp の型は何か。

hero_hp = 120

A. float
B. str
C. int
D. bool


正解:C
解説:Pythonでは整数を代入すると自動的にint型になります。
例:hero_hp = 120(勇者のHP)

【問題3】足し算の演算子

次のうち、Pythonで足し算を行う演算子はどれか。

A. *
B. +
C. -
D. /


正解:B
解説:+は加算(足し算)を行う演算子です。
例:gold + bonus(所持金+ボーナス)

【問題4】割り算の結果の型

次のコードの実行結果の型は何か。

result = 8 / 2
print(type(result))

A. <class 'int'>
B. <class 'float'>
C. <class 'str'>
D. <class 'bool'>


正解:B
解説:Pythonでは割り算(/)の結果は常にfloat型になります。
例:8 / 24.0

【問題5】べき乗の演算子

次のうち、Pythonでべき乗を計算する演算子はどれか。

A. ^
B. **
C. //
D. %


正解:B
解説:**はべき乗(累乗)を計算する演算子です。
例:2 ** 38

【問題6】余りの計算

次のコードの実行結果として正しいものを選びなさい。

print(17 % 5)

A. 2
B. 3
C. 5
D. 0


正解:B
解説:%は割り算の余りを求める演算子です。
17 ÷ 5 は商が3、余りが 2 なので、正解は 2 です。

【問題7】型変換の必要性

次のコードはエラーになります。原因として正しいものを選びなさい。

level = "5"
level_up = 1
new_level = level + level_up

A. levelが未定義
B. intstrは足せない
C. level_upが文字列である
D. +演算子が使えない


正解:B
解説:Pythonではstr型とint型を直接足すことはできません。
型変換が必要です:int(level) + level_up

【問題8】動的型付けの特徴

Pythonの「動的型付け」の特徴として正しいものを選びなさい。

A. 変数の型を明示的に宣言する必要がある
B. 変数の型は自動的に決まる
C. 型の変更はできない
D. 型が固定されている


正解:B
解説:Pythonは動的型付け言語であり、変数に代入された値によって型が自動的に決まります。

【問題9】演算結果の型変化

次のコードの実行結果の型は何か。

level = 5
level_up = 1.0
new_level = level + level_up
print(type(new_level))

A. <class 'int'>
B. <class 'float'>
C. <class 'str'>
D. <class 'bool'>


正解:B
解説:int型とfloat型を足すと、結果はfloat型になります。

【問題10】掛け算の基本

次のコードの実行結果として正しいものを選びなさい。

price = 120
quantity = 3
print(price * quantity)

A. 360
B. 123
C. 1203
D. エラーになる


正解:A
解説:*は掛け算の演算子です。
120 × 3 = 360 となり、正しく計算されます。

【問題11】魔力計算の優先順位

次のコードの実行結果(数値部分)として正しいものを選びなさい。

base_mana = 2
boost = 3
multiplier = 4
total_mana = base_mana + boost * multiplier
print(" 魔力:", total_mana)

A. 20
B. 14
C. 24
D. 10


正解:B
解説:掛け算(*)が足し算(+)より優先されます。
3 * 4 = 122 + 12 = 14。魔力は 14 です。

【問題12】封印解除の魔法式

次のコードの実行結果(数値部分)として正しいものを選びなさい。

seal_left = 2
seal_right = 3
seal_power = 4
unseal_mana = (seal_left + seal_right) * seal_power
print(" 封印解除魔力:", unseal_mana)

A. 14
B. 20
C. 24
D. 10


正解:B
解説:括弧 () が最優先で評価されます。
(2 + 3) = 55 * 4 = 20。封印解除成功!

【問題13】魔法衝突の演算

次のコードの実行結果(数値部分)として正しいものを選びなさい。

attack_power = 10
shield = 4
absorption = 2
damage = attack_power - shield / absorption
print("️ 実ダメージ:", damage)

A. 3
B. 8
C. 4
D. 6


正解:B
解説:割り算(/)が引き算(-)より優先されます。
4 / 2 = 2.010 - 2.0 = 8.0。実ダメージは 8.0

【問題14】雷魔法の連鎖

次のコードの実行結果(数値部分)として正しいものを選びなさい。

core = 2
amplify = 3
chain = 2
damage = core ** amplify * chain
print("⚡ 雷連鎖ダメージ:", damage)

A. 64
B. 16
C. 10
D. 8


正解:B
解説:べき乗(**)は掛け算(*)より優先されます。
2 ** 3 = 88 * 2 = 16。雷魔法が炸裂!

【問題15】混沌魔法の演算陣

次のコードの実行結果(数値部分)として正しいものを選びなさい。

chaos_energy = 100
divide_rune = 5
combo_factor = 2
combo_hits = 3
total_damage = chaos_energy / divide_rune + combo_factor * combo_hits
print(" 混沌魔法の総ダメージ:", total_damage)

A. 26
B. 20
C. 22
D. 18


正解:A
解説:/* は同じ優先順位で、左から順に評価されます。
100 / 5 = 20.02 * 3 = 620.0 + 6 = 26.0

課題(実践力強化用)

Pythonプログラミングの実践力を強化したい人向けの課題を用意しました。エラーの原因を読み解く力や、仕様通りにコードを書く力を養うことは、プログラミングにおいて重要ですので、初心者の方は是非チャレンジしてみてください。

課題① コード作成

以下の仕様を満たすPythonコードを1から書いてください。

  • 所持金 gold = 100 とボーナス bonus = 50 を加算して、新しい所持金を表示する
  • 表示形式は「所持金は150Gになりました」とすること
所持金は150Gになりました

仕様を満たすコードは次のようになります。

gold = 100
bonus = 50
new_gold = gold + bonus
print("所持金は", new_gold, "Gになりました")

課題② コード修正

以下のコードを実行するとエラーが表示されます。修正して「受けたダメージは30」と表示されるようにしてください。

attack = 50
defense = 20
damage = attack - defense
print("受けたダメージは" + damage)

TypeError: can only concatenate str (not "int") to str

エラーメッセージ:文字列と数値は結合できません
Pythonでは、文字列と数値を直接 `+` で結合できません。数値を文字列に変換する必要があります。

■修正後のコード

print("受けたダメージは" + str(damage))

または、カンマ区切りでもOKです。

print("受けたダメージは", damage)

課題③ コード修正

以下のコードを実行するとエラーになります。修正して「合計金額は360Gです」と表示されるようにしてください。

price = 120
quantity = 3
total_cost = price * quantity
print("合計金額は", total_price, "Gです")

NameError: name 'total_price' is not defined

エラーメッセージ:変数名が未定義
変数名のミスです。定義したのは `total_cost` なのに、`total_price` を表示しようとしているためエラーになります。

■修正後のコード

print("合計金額は", total_cost, "Gです")

課題④ コード作成

以下の仕様を満たすPythonコードを1から書いてください。

  • 経験値 total_exp = 300 を4人のパーティーで均等に分ける
  • 1人あたりの経験値を表示する(小数点なし)
1人あたりの経験値は 75.0

仕様を満たすコードは次のようになります。

total_exp = 300
party_members = 4
exp_per_member = total_exp / party_members
print("1人あたりの経験値は", int(exp_per_member))

課題⑤ コード修正

「魔法攻撃力」を底(基数)、「魔法攻撃のバフ」を指数としたべき乗の計算により、「新しい魔法攻撃力」を計算するコードを作成しました。
例えば、魔法攻撃力が2、魔法攻撃のバフが3ならば、「新しい魔法攻撃力」は8になるはずです。
しかし、以下のコードを実行すると「新しい魔法攻撃力は 1」になります。修正して「新しい魔法攻撃力は8」と正しく計算し、表示されるようにしてください。

# 魔法攻撃力
magic_power = 2

# 魔法攻撃のバフ
magic_buff = 3

# 新しい魔法攻撃力を計算
new_magic_power = magic_power ^ magic_buff

# 結果を表示
print("新しい魔法攻撃力は", new_magic_power)

出力:新しい魔法攻撃力は 1

`^` はべき乗ではなく「排他的論理和(XOR)」の演算子です。べき乗には `**` を使う必要があります。

■修正後のコード

# 魔法攻撃力
magic_power = 2

# 魔法攻撃のバフ
magic_buff = 3

# 新しい魔法攻撃力を計算
new_magic_power = magic_power ** magic_buff

# 結果を表示
print("新しい魔法攻撃力は", new_magic_power)

関連ページ(もっと学びたい人へ)

Pythonの基礎から応用例まで、以下ページから学ぶことができます。

Python超入門速報
この記事を書いた人
西住技研

プログラミング言語「Python」を研究、仕事、趣味でデータ分析や作業自動化などに活用してきたノウハウを情報発信しています。
筆者の詳しいプロフィールやお問合せはこちらのページまで。
YoutubeX(旧Twitter)でも情報発信中です!

西住技研をフォローする
Python基礎

コメント