Pythonで計算やデータ処理を行うには、「値を変数へ入れる」「値の種類を区別する」「演算子で処理する」という3つの基本を理解する必要があります。
たとえば、油圧シリンダの理論推力を計算するときは、圧力や受圧面積を数値として保持し、それらを掛け合わせて結果を求めます。
pressure_mpa = 14.0
area_mm2 = 1000.0
force_n = pressure_mpa * area_mm2
print(force_n)
実行結果です。
14000.0
短いコードですが、ここには変数、代入、浮動小数点数、乗算というPythonの重要な要素が含まれています。
今日の到達点
この記事を読み終えると、次のことができるようになります。
- 変数と値の関係を説明できる
int、float、str、bool、Noneを使い分けられるtype()で値の型を確認できる- 四則演算、比較演算、論理演算を使える
- 演算子の優先順位による計算結果の違いを理解できる
- 浮動小数点数を完全に正確な小数だと思い込まずに扱える
- 工学計算の変数名へ単位を明示できる
変数は値に付ける名前
変数は、プログラムで扱う値を参照するための名前です。
pressure_mpa = 14.0
このコードでは、pressure_mpaという変数名へ14.0という値を代入しています。
=は数学の等号ではなく、右側の値を左側の変数名へ代入する演算子です。
変数名 = 値
代入後は、変数名を使って値を参照できます。
pressure_mpa = 14.0
print(pressure_mpa)
実行結果です。
14.0
変数の値は後から変更できます。
pressure_mpa = 14.0
pressure_mpa = 16.0
print(pressure_mpa)
実行結果です。
16.0
2回目の代入によって、pressure_mpaが参照する値が更新されています。
変数名の付け方
変数名は、値の意味が分かるように付けます。
悪い例です。
a = 14.0
b = 1000.0
c = a * b
計算自体はできますが、a、b、cが何を意味するのか分かりません。
改善例です。
pressure_mpa = 14.0
area_mm2 = 1000.0
force_n = pressure_mpa * area_mm2
この書き方なら、それぞれが圧力、面積、推力であることが分かります。
工学計算では、変数名に単位を含める方法が有効です。
pressure_mpa:圧力 MPabore_mm:シリンダ内径 mmarea_mm2:面積 mm²flow_l_min:流量 L/minforce_n:力 N
Pythonの変数自体には物理単位を自動判定する機能がありません。14という値だけでは、14 Paなのか14 MPaなのか判断できないため、名前やデータ構造で単位を明示します。
変数名には一般的に、小文字の英単語をアンダースコアでつなぐsnake_caseを使用します。
cylinder_bore_mm = 80.0
working_pressure_mpa = 14.0
Pythonの基本データ型
データ型は、値の種類と、その値に対して行える操作を表します。
今回扱う基本型は次の5つです。
| 型 | 用途 | 値の例 |
|---|---|---|
int | 整数 | 12 |
float | 小数を含む数値 | 14.0 |
str | 文字列 | "Cylinder" |
bool | 真偽値 | True |
NoneType | 値がない状態 | None |
Python公式ドキュメントでは、主要な組み込み型として数値、シーケンス、マッピングなどが定義されています。Pythonの組み込み型で詳細を確認できます。
int:整数
intは、小数部分を持たない整数を表す型です。
part_count = 12
retry_count = 3
temperature_c = -10
型はtype()で確認できます。
part_count = 12
print(type(part_count))
実行結果です。
<class 'int'>
Pythonの整数は、利用可能なメモリの範囲内で任意の大きさを扱えます。固定された32ビット整数のように、常に一定の最大値で打ち切られる型ではありません。Pythonの数値型にも、整数は無制限の精度を持つと記載されています。
ただし、非常に大きな整数ほどメモリと計算時間を使用します。
float:浮動小数点数
floatは、小数を含む数値を扱う型です。
pressure_mpa = 14.0
bore_mm = 80.5
efficiency = 0.92
print(type(pressure_mpa))
実行結果です。
<class 'float'>
14はintですが、14.0はfloatです。
print(type(14))
print(type(14.0))
実行結果です。
<class 'int'>
<class 'float'>
整数と浮動小数点数を一緒に計算すると、通常は浮動小数点数の結果になります。
result = 10 + 2.5
print(result)
print(type(result))
実行結果です。
12.5
<class 'float'>
str:文字列
strは文字列を表す型です。文字列は、単一引用符または二重引用符で囲みます。
part_name = "Hydraulic cylinder"
status = 'ready'
print(type(part_name))
実行結果です。
<class 'str'>
数字のように見えても、引用符で囲まれていれば文字列です。
pressure_text = "14"
pressure_number = 14
この2つは別の型です。
print(type(pressure_text))
print(type(pressure_number))
実行結果です。
<class 'str'>
<class 'int'>
型の違いを無視すると、意図しない結果になります。
print("14" * 2)
print(14 * 2)
実行結果です。
1414
28
文字列の"14"を2回繰り返す処理と、整数の14を2倍する処理は同じではありません。
bool:真偽値
boolは、条件が成立しているかどうかを表します。
値は次の2つだけです。
True
False
先頭は大文字です。trueやfalseではありません。
is_checked = True
is_over_limit = False
print(type(is_checked))
実行結果です。
<class 'bool'>
比較演算の結果もboolになります。
pressure_mpa = 14.0
is_over_limit = pressure_mpa > 16.0
print(is_over_limit)
実行結果です。
False
Pythonではboolは整数型のサブタイプですが、実務コードではTrueを1、Falseを0の代用品として乱用せず、判定結果として扱う方が意味を明確にできます。Pythonのbool型では、真偽値がTrueとFalseの2つであることが定義されています。
None:値がないことを表す
Noneは「0」や空文字列ではなく、値が設定されていない、該当する値がないといった状態を表す特別なオブジェクトです。
measured_pressure_mpa = None
print(type(measured_pressure_mpa))
実行結果です。
<class 'NoneType'>
たとえば、まだ圧力を測定していない状態を0.0で表すと、「測定した結果が0 MPaだった」のか「未測定なのか」を区別できません。
measured_pressure_mpa = None
このようにNoneを使えば、未測定であることを明確にできます。
Noneかどうかは、通常is Noneで確認します。
if measured_pressure_mpa is None:
print("Pressure has not been measured.")
Python公式ドキュメントでは、Noneは組み込み名であり、単一のnullオブジェクトであると定義されています。Null Objectを参照してください。
四則演算と数値演算子
Pythonの代表的な数値演算子は次のとおりです。
| 演算子 | 意味 | 例 | 結果 |
|---|---|---|---|
+ | 加算 | 5 + 2 | 7 |
- | 減算 | 5 - 2 | 3 |
* | 乗算 | 5 * 2 | 10 |
/ | 除算 | 5 / 2 | 2.5 |
// | 切り下げ除算 | 5 // 2 | 2 |
% | 余り | 5 % 2 | 1 |
** | べき乗 | 5 ** 2 | 25 |
一度に確認してみます。
print(17 / 3)
print(17 // 3)
print(17 % 3)
print(2 ** 5)
実行結果です。
5.666666666666667
5
2
32
/による除算は、整数同士でもfloatを返します。
print(10 / 2)
print(type(10 / 2))
実行結果です。
5.0
<class 'float'>
//は単純に小数点以下を削除する演算ではなく、負の無限大方向へ切り下げます。
print(5 // 2)
print(-5 // 2)
実行結果です。
2
-3
-5 / 2は-2.5なので、負の無限大方向へ切り下げると-3になります。この挙動はPythonの数値演算に定義されています。
比較演算子
比較演算子は、2つの値を比較してTrueまたはFalseを返します。
| 演算子 | 意味 |
|---|---|
== | 等しい |
!= | 等しくない |
< | より小さい |
<= | 以下 |
> | より大きい |
>= | 以上 |
pressure_mpa = 14.0
print(pressure_mpa == 14.0)
print(pressure_mpa != 10.0)
print(pressure_mpa <= 16.0)
実行結果です。
True
True
True
代入は=、等しいかどうかの比較は==です。
pressure_mpa = 14.0
is_equal = pressure_mpa == 14.0
Pythonでは比較を連結して書けます。
pressure_mpa = 14.0
is_in_range = 10.0 <= pressure_mpa <= 16.0
print(is_in_range)
実行結果です。
True
これは圧力が10 MPa以上かつ16 MPa以下であることを表します。
論理演算子
複数の条件を組み合わせるには、論理演算子を使います。
| 演算子 | 意味 |
|---|---|
and | 両方が成立 |
or | どちらかが成立 |
not | 真偽を反転 |
pressure_mpa = 14.0
is_checked = True
can_operate = is_checked and pressure_mpa <= 16.0
print(can_operate)
実行結果です。
True
andとorは短絡評価を行います。andは左側が偽なら右側を評価せず、orは左側が真なら右側を評価しません。PythonのBoolean演算に、この動作が定義されています。
演算子の優先順位
演算子には計算される順番があります。
result = 10 + 2 * 3
print(result)
実行結果です。
16
乗算が加算より先に行われるため、計算は次の順番です。
10 + (2 × 3) = 16
先に加算したい場合は括弧を使います。
result = (10 + 2) * 3
print(result)
実行結果です。
36
入門段階で覚えておきたい主な優先順位は、上から順に次のとおりです。
- 括弧
() - べき乗
** - 単項演算
+x、-x - 乗除算
*、/、//、% - 加減算
+、- - 比較演算
notandor
完全な一覧はPythonの演算子優先順位で確認できます。
複雑な式では、優先順位を暗記して短く書くより、括弧で意図を明示する方が安全です。
force_n = pressure_mpa * (math.pi * bore_mm ** 2 / 4)
工学計算の例:シリンダの理論推力
シリンダ内径80 mm、圧力14 MPaとして、押し側の理論推力を求めます。
受圧面積は次の式です。
理論推力は次の式です。
ここで、
- :シリンダ内径 mm
- :受圧面積 mm²
- :圧力 MPa
- :理論推力 N
とします。
なので、MPaとmm²を掛けるとNになります。
import math
bore_mm = 80.0
pressure_mpa = 14.0
area_mm2 = math.pi * bore_mm ** 2 / 4
force_n = pressure_mpa * area_mm2
force_kn = force_n / 1000
print(f"Area: {area_mm2:.3f} mm²")
print(f"Force: {force_n:.3f} N")
print(f"Force: {force_kn:.3f} kN")
実行結果です。
Area: 5026.548 mm²
Force: 70371.675 N
Force: 70.372 kN
このコードは実行確認済みです。
これは摩擦、圧力損失、背圧、安全率などを含まない理論値です。実機の設計値として使用する場合は、それらの条件を別途扱う必要があります。
floatは小数を完全に表せるとは限らない
コンピュータのfloatは、多くの小数を2進数の有限桁で近似して保持します。
そのため、次の計算結果は見た目どおりの0.3になりません。
result = 0.1 + 0.1 + 0.1
print(result)
print(result == 0.3)
実行結果です。
0.30000000000000004
False
これはPython固有の不具合ではありません。0.1を有限桁の2進小数で正確に表現できないことによるものです。Python公式チュートリアルの浮動小数点解説では、0.1が内部的には最も近い2進分数として保存されることが説明されています。
近似値同士を比較するときは、完全一致ではなくmath.isclose()を使えます。
import math
result = 0.1 + 0.1 + 0.1
print(math.isclose(result, 0.3))
実行結果です。
True
ただし、許容誤差は用途によって異なります。寸法、圧力、流量、金額をすべて同じ許容誤差で比較してよいわけではありません。
工学計算では、次を明確にします。
- 入力値の有効桁数
- 計測精度
- 許容差
- 比較に使う絶対誤差または相対誤差
- 表示時に丸める桁数
表示を丸めることと、内部の値が正確になることは別です。
value = 0.1 + 0.1 + 0.1
print(f"{value:.2f}")
出力は0.30になりますが、内部値そのものを10進小数へ変換したわけではありません。
金額など10進表現の正確さが必要な用途では、標準ライブラリのdecimal.Decimalを検討します。一般的な工学計算ではfloatが十分な場合も多いものの、誤差の存在を理解して使用する必要があります。
型の違いによる代表的な失敗
文字列と数値を直接加算する
pressure_text = "14"
result = pressure_text + 2
このコードはTypeErrorになります。strとintをそのまま加算できないためです。
数値として扱うなら、用途に応じて変換します。
pressure_text = "14"
pressure_mpa = float(pressure_text)
result = pressure_mpa + 2
print(result)
実行結果です。
16.0
入力された文字列を無条件に変換すると、不正な入力で例外が発生します。入力検証と例外処理は後続の記事で詳しく扱います。
単位の異なる値をそのまま加算する
次の式はPython上では実行できますが、物理的には不適切です。
length_mm = 100
length_m = 2
total = length_mm + length_m
Pythonは変数名を見て単位変換をしてくれません。どちらかの単位へそろえてから計算します。
length_mm = 100
length_m = 2
total_mm = length_mm + length_m * 1000
print(total_mm)
実行結果です。
2100
「エラーが出ない」ことは、「計算が物理的に正しい」ことを意味しません。
Noneを数値として計算する
measured_pressure_mpa = None
result = measured_pressure_mpa * 1000
未測定値を数値として使おうとしているため、TypeErrorになります。
計算前に状態を確認します。
if measured_pressure_mpa is None:
print("Measurement is required.")
実務での設計ルール
Pythonで工学データを扱うときは、次のルールが役立ちます。
- 意味の分かる変数名を使う
- 数値の単位を変数名で明示する
- 未取得値と実測値0を区別する
- 中間計算では早すぎる丸めを避ける
- 出力時の表示桁数と計算精度を分ける
floatの完全一致を安易に判定条件へ使わない- 複雑な式では括弧で計算順序を明示する
- コードが動くかだけでなく、数式と単位が妥当か確認する
これらは、コードを設計知識として再利用するための基礎になります。
練習問題
型を予想する
次の値の型を予想してください。
value_a = 25
value_b = 25.0
value_c = "25"
value_d = False
value_e = None
解答例です。
print(type(value_a))
print(type(value_b))
print(type(value_c))
print(type(value_d))
print(type(value_e))
実行結果です。
<class 'int'>
<class 'float'>
<class 'str'>
<class 'bool'>
<class 'NoneType'>
流量を秒単位へ変換する
流量60 L/minをL/sへ変換してください。
解答例です。
flow_l_min = 60.0
flow_l_s = flow_l_min / 60
print(flow_l_s)
実行結果です。
1.0
許容範囲を判定する
圧力14 MPaが、許容範囲10 MPa以上16 MPa以下に入っているか判定してください。
解答例です。
pressure_mpa = 14.0
is_in_range = 10.0 <= pressure_mpa <= 16.0
print(is_in_range)
実行結果です。
True
まとめ
Pythonでは、値の種類によって実行できる処理が変わります。
intは整数を表すfloatは浮動小数点数を表すstrは文字列を表すboolはTrueまたはFalseを表すNoneは値がない状態を表すtype()で値の型を確認できる- 四則演算に加えて、切り下げ除算、余り、べき乗を使用できる
- 比較演算と論理演算の結果は条件判定に利用できる
- 括弧を使うと計算の意図を明確にできる
floatには2進表現に由来する近似誤差がある- 工学計算では変数名、単位、数式、許容誤差をセットで管理する
単に数値を計算するだけなら短いコードで済みます。しかし、そのコードを再利用可能な計算ロジックにするには、値の意味、型、単位、未入力状態、誤差まで区別する必要があります。

