Pythonの変数とデータ型を理解する|数値・文字列・真偽値・演算子の基本

「Pythonの変数とデータ型を理解する|数値・文字列・真偽値・演算子の基本」の内容を表す技術イラスト

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:圧力 MPa
  • bore_mm:シリンダ内径 mm
  • area_mm2:面積 mm²
  • flow_l_min:流量 L/min
  • force_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 + 27
-減算5 - 23
*乗算5 * 210
/除算5 / 22.5
//切り下げ除算5 // 22
%余り5 % 21
**べき乗5 ** 225

一度に確認してみます。

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

入門段階で覚えておきたい主な優先順位は、上から順に次のとおりです。

  1. 括弧 ()
  2. べき乗 **
  3. 単項演算 +x、-x
  4. 乗除算 *、/、//、%
  5. 加減算 +、-
  6. 比較演算
  7. not
  8. and
  9. or

完全な一覧はPythonの演算子優先順位で確認できます。

複雑な式では、優先順位を暗記して短く書くより、括弧で意図を明示する方が安全です。

force_n = pressure_mpa * (math.pi * bore_mm ** 2 / 4)

工学計算の例:シリンダの理論推力

シリンダ内径80 mm、圧力14 MPaとして、押し側の理論推力を求めます。

受圧面積は次の式です。A=πD24A=\frac{\pi D^2}{4}

理論推力は次の式です。F=pAF=pA

ここで、

  • DD:シリンダ内径 mm
  • AA:受圧面積 mm²
  • pp:圧力 MPa
  • FF:理論推力 N

とします。

1 MPa=1 N/mm21\ \mathrm{MPa}=1\ \mathrm{N/mm^2}なので、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進表現に由来する近似誤差がある
  • 工学計算では変数名、単位、数式、許容誤差をセットで管理する

単に数値を計算するだけなら短いコードで済みます。しかし、そのコードを再利用可能な計算ロジックにするには、値の意味、型、単位、未入力状態、誤差まで区別する必要があります。

参考情報

参考になったらシェアしてください
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

機械設計・油圧・CAD・Python・AIなど、ものづくりに関わる技術を扱っています。工学知識を整理・構造化し、設計や自動化に再利用できる形へ変えていくことを目指しています。

目次