2. 変数とデータ型の考え方を身に付けよう

目次

この講座で使用する Google Colab の URL

2. 変数とデータ型の考え方を身に付けよう (Google Colab)

演習課題

Ex.2. 変数とデータ型の考え方を身に付けよう (Google Colab)

この講座で使用する Python, Jupyter Notebook のファイルと実行環境

Lesson 2: high-school-python-code (GitHub)

2.1 変数とは?数や文字を入れる「箱」のイメージ

プログラミングを始めると最初に出会う重要な概念の 1 つが「変数」です。変数は少し難しく聞こえるかもしれませんが、実は私たちの身近にあるものと同じような仕組みです。

変数の基本的な考え方

変数 x
42
x = 42

変数は、データを一時的に保存できる「箱」のようなものです。例えば、教室にある下駄箱を想像してみましょう。下駄箱には名前が書いてあり、その中に上履きを入れます。変数も同じように、名前(変数名)があり、その中にデータを入れることができます。

変数を使う基本の形

まずは簡単な例から見てみましょう:

変数にデータを入れる (代入する)

score = 85  # score という箱に 85 を入れる
name = "田中"  # name という箱に "田中" を入れる

# 変数の中身を表示する
print(score)  # 85 が表示される
print(name)   # 田中が表示される

この例では、scorename という2つの箱(変数)を作り、それぞれに数値の 85 と文字列の "田中" を入れています。

変数の値は変更できる

変数の大きな特徴は、一度入れた値を後から変更できることです。

変数の値を変更する

score = 85
print("1回目のテスト:", score)  # 1回目のテスト: 85
# 同じ変数に新しい値を代入
score = 92
print("2回目のテスト:", score)  # 2回目のテスト: 92

name = "山田"
print("以前の名前:", name)  # 以前の名前: 山田
name = "鈴木"
print("新しい名前:", name)  # 新しい名前: 鈴木

変数を使うメリット

変数を使うことで、以下のような便利な機能が実現できます:

  1. データの再利用:一度保存した値を何度でも使える
  2. データの更新:値を簡単に変更できる
  3. 分かりやすいプログラム:数値の意味を変数名で表現できる

例えば、テストの平均点を計算する場合:

変数を使って平均点を計算する

math_score = 85
english_score = 92
total = math_score + english_score  # 合計点
average = total / 2  # 平均点
print("平均点:", average)  # 平均点: 88.5

日本語の変数名でも一応書ける (非推奨)

なまえ = "山田"
print(なまえ)  # 山田

変数を使う時の重要なポイント

  1. 一つの箱には一つの値

    • 一つの変数には、同時に一つの値しか入れられません
    • 新しい値を入れると、前の値は消えてしまいます (上書きされます)
  2. 適切な名前をつける

    • 変数の中身が分かりやすい名前をつけましょう
    • 例:score(点数)、name(名前)、age(年齢)など
  3. 値を入れてから使う

    • 変数は必ず値を入れてから使います
    • 値が入っていない変数を使うと NameError という例外になります

値が入っていない変数を使うと例外になる

print(undefined_variable)  # NameError: name 'undefined_variable' is not defined

2.2 整数・小数・文字列など、データ型を区別しよう

先ほど学んだ変数という「箱」には、いろいろな種類のデータを入れることができます。

しかし、ただ入れるだけではなく、そのデータが「どんな種類のものか」を理解することが大切です。これを「データ型」と呼びます。

基本的なデータ型

Python では主に以下のデータ型を使います:

色々なデータ型

# 整数型 (int)
age = 16
year = 2024

# 小数型 (float)
height = 170.5
weight = 58.3

# 文字列型 (str)
name = "鈴木"
message = '今日は晴れです'

# データ型を確認するには type() を使う
print(type(age))     # <class 'int'>
print(type(height))  # <class 'float'>
print(type(name))    # <class 'str'>

データ型の特徴と使い方

1. 整数型 (Integer: int)

整数型は、私たちが普段使う「1, 2, 3...」のような整数を扱うためのデータ型です。

整数型の例

students = 40  # クラスの人数
score = 85     # テストの点数
year = 2024    # 西暦

# 整数の計算
total = students + 5  # 足し算
double = score * 2    # 掛け算

2. 小数型 (Float: float)

小数型は、小数点を含む数値を扱うためのデータ型です。身長や体重、気温など、細かい数値を扱う時に使います。

小数型の例

height = 170.5  # 身長 (cm)
weight = 58.3  # 体重 (kg)

# 小数の計算
bmi = weight / (height / 100) ** 2  # BMI の計算
average = (80.5 + 92.0 + 88.5) / 3  # 平均点の計算

# その他の例
temperature = 22.8  # 気温 (度)
price = 1200.50  # 価格 (円)

3. 文字列型 (String: str)

文字列型は、文字の並びを扱うためのデータ型です。名前、メッセージ、住所など、文字で表現するデータを扱います。String は英語で「糸や弦」という意味です。文字列は、文字 (character) の列 (string) という意味です。

文字列型の例

name = "山田太郎"  # 名前
message = 'こんにちは'  # メッセージ
address = "東京都渋谷区"  # 住所

# 文字列の連結
full_message = "こんにちは、" + name + "さん"
print(full_message)  # こんにちは、山田太郎さん

それぞれのボタンを押してみましょう!

↑ 上のボタンをクリックしてみましょう!

データ型を調べる

変数のデータ型を確認したい時は、type() 関数を使います:

様々な変数の型を確認する

age = 16
height = 170.5
name = "鈴木"

print(type(age))     # <class 'int'>
print(type(height))  # <class 'float'>
print(type(name))    # <class 'str'>

データ型の使い分け

データ型を正しく使い分けることで、次のようなメリットがあります:

  1. 適切な計算ができる

    • 整数と小数では計算結果が異なることがある
    • 文字列と数値は異なる演算ができる
  2. エラーを防げる

    • 異なるデータ型同士の予期しない操作を防ぐ
    • プログラムの信頼性や安全性が高まる

データ型の違いによる計算の例

print(5 / 2)  # 2.5 (小数の割り算)
print(5 // 2)  # 2 (整数の割り算)
print("ABC" * 3)  # ABCABCABC (文字列の繰り返し)

2.3 変数名の名付け方のポイント

プログラミングにおいて、変数名を適切につけることは非常に重要です。なぜなら、良い変数名は「プログラムの説明書」のような役割を果たすためです。

例えば、試験の点数を変数に代入する時は、x = 85 よりも exam_score = 85 の方が、何のための数値か分かりやすいです。

変数名をつける基本ルール

1. 使って良いもの

  • アルファベット(a-z, A-Z)
  • 数字(ただし先頭には使えない)
  • アンダースコア(_

2. 使ってはいけないもの

  • 日本語の漢字・ひらがな(技術的には使えますが、避けましょう)
  • スペース
  • 記号(_ 以外)
  • Python の予約語(if, for など)

変数名の付け方の良い例

student_name = "山田"  # 生徒の名前
test_score = 85       # テストの点数
total_price = 1200    # 合計金額
first_name = "太郎"    # 名前(氏名の一部)
birth_year = 2007     # 生まれた年

変数名の付け方の悪い例

なまえ = "山田"      # 日本語は避ける
test score = 85    # スペースは使えない
1st_place = "金賞"  # 数字から始まれない
if = "条件"         # 予約語は使えない
$price = 100       # 記号は使えない ( _ 以外)

良い変数名のつけ方

変数名は「何のためのデータか」が分かるように付けると良いです。以下のポイントを意識しましょう。

  1. 具体的な名前をつける

具体的な名前をつける

# 悪い例
x = 85  # x が何を表すのか分からない
n = "山田"  # n が何を表すのか分からない

# 良い例
math_score = 85  # 数学の点数だと分かる
student_name = "山田"  # 生徒の名前だと分かる
  1. 複数の単語は _(アンダースコア)でつなぐ

複数の単語は _(アンダースコア)でつなぐ

# 推奨される書き方 (スネークケース)
user_age = 16
total_score = 85
average_height = 170.5

# スペースは使えません
user age = 16  # エラーになる
  1. 省略しすぎない

省略しすぎない

# 悪い例 (意味が分かりづらい)
num = 30  # number の意味?count の意味?
calc = 85 + 90  # calculation? calculator?

# 良い例 (分かりやすい)
student_count = 30
total_score = 85 + 90

具体的な変数名の例

プログラムの目的に応じた、分かりやすい変数名の例を見てみましょう:

成績管理プログラムの例

student_name = "山田太郎"                  # 生徒の名前
math_score = 85                           # 数学の点数
english_score = 92                        # 英語の点数
total_score = math_score + english_score  # 合計点
average_score = total_score / 2           # 平均点

買い物プログラムの例

item_name = "リンゴ"                  # 商品名
unit_price = 120                     # 1個の値段
quantity = 5                         # 個数
total_price = unit_price * quantity  # 合計金額

2.4 文字列を操作する(文字の連結・分割など)

文字列は、プログラミングでとてもよく使うデータ型です。名前を結合したり、メッセージの一部を取り出したり、文字数を数えたり...。ここでは、文字列を操作する方法を学びましょう。

文字列の基本操作

1. 文字列の連結 ( + )

文字列は + を使って連結(くっつける)できます。

文字列の連結

first = "山田"
last = "太郎"
full_name = first + last
print(full_name)  # 山田太郎

# スペースを入れて連結
full_name = first + " " + last
print(full_name)  # 山田 太郎

# 文字列と数値を連結する時は str() で変換が必要
age = 16
message = "私は" + str(age) + "歳です"
print(message)  # 私は16歳です

2. 文字列の繰り返し ( * )

文字列は * を使って繰り返すことができます。

文字列の繰り返し

star = "★"
print(star * 3)  # ★★★
print("わくわく" * 2)  # わくわくわくわく

# 装飾的な使い方
print("=" * 20)  # ====================
print("Hello!")  # Hello!
print("=" * 20)  # ====================

3. 文字列の長さを調べる( len()

文字列の長さ(文字数)は len() 関数で調べられます。

文字列の長さを調べる

message = "こんにちは"
print(len(message))  # 5

name = "山田 太郎"  # スペースも 1 文字として数えます
print(len(name))  # 5

english = "Hello!"
print(len(english))  # 6

4. 文字列から一部を取り出す(スライス)

文字列は、位置を指定して一部を取り出すことができます。

文字列から一部を取り出す

text = "Python"
print(text[0])    # P (最初の文字)
print(text[1])    # y (2番目の文字)
print(text[-1])   # n (最後の文字)

# スライスで範囲を指定して取り出す
print(text[0:2])  # Py (0 番目から 2 番目の手前まで)
print(text[2:4])  # th (2 番目から 4 番目の手前まで)
print(text[:3])   # Pyt (最初から 3 番目の手前まで)
print(text[2:])   # thon (2 番目から最後まで)

文字列のスライスのアニメーション

0
1
2
3
4
5
6
P
y
t
h
o
n
1
4
text = "Python"
text[1:4] = "yth"

インデックスは文字と文字の「間」を指します。
スライダーを動かして、異なる範囲を試してみましょう

5. 文字列の検索と置換

文字列の中から特定の文字を探したり、置き換えたりできます。

文字列の検索と置換

# 文字列の検索
text = "私は Python が好きです"
print("Python" in text)  # True (含まれているか確認)
print(text.find("Python"))  # 3 (出現位置。見つからない場合は -1)
print(text.find("JavaScript"))  # -1 (見つからないので -1)

# 文字列の置換
message = "私はりんごが好きです"
new_message = message.replace("りんご", "バナナ")
print(new_message)  # 私はバナナが好きです

よく使う文字列メソッド

文字列には、便利な操作メソッドが用意されています。

よく使う文字列メソッド

# あえて左右に空白を入れています
text = "  Hello, Python!  "

# 空白の削除
print(text.strip())  # "Hello, Python!" (前後の空白を削除)

# 大文字・小文字の変換
print(text.upper())  # "  HELLO, PYTHON!  " (大文字に)
print(text.lower())  # "  hello, python!  " (小文字に)

# 文字列の分割
words = "りんご,バナナ,オレンジ"
fruit_list = words.split(",")  # ["りんご", "バナナ", "オレンジ"]

実践的な文字列操作の例

実際のプログラムでの使用例を見てみましょう。

実践的な文字列操作の例

# ユーザー名とパスワードの作成
username = "yamada_taro"
domain = "example.com"
email = username + "@" + domain  # メールアドレスの作成
print(email)  # yamada_taro@example.com

# 整形された出力の作成
name = "山田太郎"
score = 85
result = f"{name}さんの点数は{score}点です"
print(result)  # 山田太郎さんの点数は85点です

# ファイル名から拡張子を取り出す
filename = "report.pdf"
extension = filename[-4:]  # 後ろから 4 文字を取得
print(extension)  # .pdf

2.5 数字と文字の型変換をしてみよう

プログラミングをしていると、「文字列として保存された数字を計算に使いたい」とか「数値を文字列として表示したい」といった場面によく出会います。このような時に必要となるのが「型変換」です。

なぜ型変換が必要?

例えば、次のようなケースを考えてみましょう。

型変換が必要なケース

score = 85
message = "得点は" + score + "点です"  # エラー!
# TypeError: can only concatenate str (not "int") to str

このコードはエラーになります。なぜでしょう?

それは、Python が「文字列("得点は")」と「数値(85)」を直接連結することができないからです。これを解決するために、数値を文字列に変換する必要があります。

型変換をしたケース

score = 85
message = "得点は" + str(score) + "点です"  # 得点は85点です

これで、エラーが解消されます。

基本的な型変換の方法

1. 文字列を数値に変換

文字列を数値に変換

# 文字列 → 整数 int()
age_str = "16"
age_num = int(age_str)  # 文字列を整数に変換
print(age_num + 1)  # 17 (計算ができる)

# 文字列 → 小数 float()
height_str = "170.5"
height_num = float(height_str)  # 文字列を小数に変換
print(height_num + 1)  # 171.5 (計算ができる)

2. 数値を文字列に変換

数値を文字列に変換

# 数値 → 文字列 str()
score = 85
score_str = str(score)  # 数値を文字列に変換
message = "得点は" + score_str + "点です"
print(message)  # 得点は85点です

# 小数 → 文字列 str()
height = 170.5
height_str = str(height)  # 小数を文字列に変換
print("身長は" + height_str + "cmです")  # 身長は170.5cmです

3. 整数と小数の変換

整数と小数の変換

# 小数 → 整数 (小数点以下切り捨て)
height = int(170.8)  # 170
price = int(1200.9)  # 1200

# 整数 → 小数
count = float(80)  # 80.0
rate = float(100)  # 100.0

具体的な型変換の例

実際のプログラムでの使用例を見てみましょう。

具体的な型変換の例

# 入力された文字列を数値として計算
height_str = "170.5"
weight_str = "60.2"

height = float(height_str)
weight = float(weight_str)

# BMI の計算
bmi = weight / (height/100) ** 2
# 小数点第 1 位まで表示
print("BMI:", round(bmi, 1))  # BMI: 24.2

# 計算結果を文字列として整形
result = f"身長 {height} cm, 体重 {weight} kg の BMI は {round(bmi, 1)} です"
print(result)  # 身長 170.5cm, 体重60.2kg の BMI は 24.2 です

よくある使用パターン

  1. ユーザー入力の処理

ユーザー入力の処理

# ユーザーからの入力は常に文字列として扱われます
# 実際のプログラムでは input() を使って、ユーザーからの入力を受け取ります
age_str = "16"
age = int(age_str)
next_year = age + 1
print(f"来年は{next_year}歳になります")  # 来年は17歳になります
  1. データの表示整形

データの表示整形

score = 85
total = 100
rate = score / total * 100
message = f"得点率は {str(round(rate, 1))}% です"
print(message)  # 得点率は 85.0% です
  1. 複数の型変換を組み合わせる

複数の型変換を組み合わせる

# 文字列の小数を整数に変換
price_str = "1200.8"
price = int(float(price_str))  # 一度 float に変換してから int に変換
print(price)  # 1200

2.6 真偽値(True/False)と比較演算子で判断する

私たちの日常生活では、「テストの点数は合格点以上か?」「持ち物は全部そろっているか?」など、様々な「はい / いいえ」「Yes / No」「True / False」で答える判断をしています。プログラミングでも同じように、条件を判断する場面が多くあります。その時に使うのが「真偽値」と「比較演算子」です。

真偽値(Boolean)とは

真偽値は、True(真)と False(偽)の2つの値だけを持つデータ型です。

プログラミング言語によっては truefalse のように小文字を使うものも多くありますが、Python では最初の文字は大文字なので注意しましょう。

真偽値の基本

is_student = True  # はい、学生です
has_pet = False  # いいえ、ペットは飼っていません

print(type(is_student))  # <class 'bool'>

比較演算子で条件を判断する

基本的な比較演算子

数値の大小関係や等しいかどうかを判断できます。

数値の比較

age = 16
print(age > 15)   # True (15 より大きい)
print(age < 20)   # True (20 より小さい)
print(age == 16)  # True (16 と等しい)
print(age != 18)  # True (18 と異なる)
print(age >= 16)  # True (16 以上)
print(age <= 16)  # True (16 以下)
演算子意味
==等しいx == y
!=等しくないx != y
>より大きいx > y
<より小さいx < y
>=以上x >= y
<=以下x <= y

実践的な比較の例

テストの合否判定を例に見てみましょう。分かりやすいように、bool 型を明示的に指定しています。(型ヒント)

テストの合否判定

score = 85
pass_score = 70

is_passed: bool = score >= pass_score
print("合格ですか?:", is_passed)  # True

# 点数の範囲チェック
is_excellent: bool = score >= 90
is_good: bool = score >= 80 and score < 90
is_average: bool = score >= 70 and score < 80

print("優秀な成績ですか?:", is_excellent)  # False
print("良い成績ですか?:", is_good)        # True
print("平均的な成績ですか?:", is_average)  # False

文字列の比較

文字列も比較することができます:

文字列の比較

name = "山田"
print(name == "山田")  # True (完全に一致)
print(name != "田中")  # True (異なる)

# 文字の大小比較 (辞書順)
print("apple" < "banana")  # True (アルファベット順)
print("山田" < "田中")     # True (50 音順)

複数の条件を組み合わせる

and, or, not を使って、複数の条件を組み合わせることができます:

複数の条件を組み合わせる

age = 16
score = 85

# and (両方の条件が True なら True)
is_eligible = age >= 15 and score >= 80
print("参加資格がありますか?:", is_eligible)  # True

# or (どちらかの条件が True なら True)
needs_support = score < 60 or age < 15
print("サポートが必要ですか?:", needs_support)  # False

# not (条件を逆転させる)
is_adult = age >= 18
is_child = not is_adult
print("子供ですか?:", is_child)  # True
演算子意味
and両方が True なら Truex and y
orどちらかが True なら Truex or y
notTrue と False を反転not x

色々な組み合わせを見てみましょう。

真偽値の計算例

age = 16
score = 85
print(age > 15 and score < 90)   # True
print(age == 18 or score >= 80)  # True
print(not (age < 15))            # True

実世界での応用例

実際のプログラムでの使用例を見てみましょう。

実際のプログラムでの使用例

# 映画の年齢制限チェック
age = 16
movie_rating = 15
can_watch = age >= movie_rating
print("映画を見られますか?:", can_watch)  # True

# 商品の在庫チェック
stock = 5
min_stock = 3
needs_restock = stock <= min_stock
print("在庫の補充が必要ですか?:", needs_restock)  # False

# クーポン使用の条件チェック
purchase_amount = 3000
is_member = True
can_use_coupon = purchase_amount >= 2000 and is_member
print("クーポンは使用できますか?:", can_use_coupon)  # True

2.7 いろいろなデータ型を組み合わせる

これまで学んできた様々なデータ型(整数、小数、文字列、真偽値)は、実際のプログラムでは組み合わせて使うことが多いです。この節では、データ型を組み合わせて使う実践的な例を見ていきましょう。

成績管理プログラムの例

まずは、学校の成績管理プログラムを例に見てみましょう。型ヒントは必ずしも書く必要はないのですが、今回は色々なデータ型が登場するので、読みやすくするために書いています。

成績管理プログラムの例

# 生徒の情報を変数で管理
name: str = "山田太郎"
grade: int = 2
class_number: str = "A"
math_score: int = 92
english_score: int = 78
is_passed: bool = True

# 情報を整形して表示
print("=== 成績情報 ===")
print("名前:" + name)
print("学年:" + str(grade))
print("クラス:" + class_number)
print("数学:" + str(math_score) + "点")
print("英語:" + str(english_score) + "点")
print("合格:" + str(is_passed))

# 平均点の計算と判定
total = math_score + english_score
average = total / 2
is_excellent = average >= 90

print("合計点:" + str(total) + "点")
print("平均点:" + str(average) + "点")
print("優秀者:" + str(is_excellent))

より見やすい文字列フォーマットの方法

実はこれまでのプログラムでもしばしば使っていましたが、f-strings というものを使うと、より見やすく書くことが出来ます。

f-strings を使った表示方法

print(f"=== {name}の成績情報 ===")
print(f"学年:{grade}{class_number}組")
print(f"数学:{math_score}点")
print(f"英語:{english_score}点")
print(f"平均:{average:.1f}点")  # 小数点 1 桁まで表示

商品管理プログラムの例

次は、お店の商品管理プログラムを例に見てみましょう。

商品情報の管理

product_name: str = "ノート"
price: int = 280
quantity: int = 25
tax_rate: float = 0.10
is_available: bool = True

# 在庫金額の計算
total_price: int = price * quantity
tax_amount: float = total_price * tax_rate
total_with_tax: float = float(total_price) + tax_amount

# 在庫状況の判定
is_low_stock: bool = quantity < 20
needs_reorder: bool = quantity <= 10

# 情報の表示
print(f"【商品情報】")
print(f"商品名:{product_name}")
print(f"単価:{price}円")
print(f"在庫数:{quantity}個")
print(f"在庫金額:{total_price}円")
print(f"消費税:{tax_amount}円")
print(f"税込金額:{total_with_tax}円")
print(f"販売可能:{is_available}")
print(f"在庫少:{is_low_stock}")
print(f"要発注:{needs_reorder}")

実践的なプログラムでの型の使い分け

データ型の選び方の基本的な方針は、このような感じです。

  1. 整数型 (int) を使う場合

    • 個数、年齢、価格など、小数点が不要な数値
    • カウント値、インデックス番号
  2. 小数型 (float) を使う場合

    • 身長、体重、気温など、細かい数値が必要なもの
    • 割合、比率の計算結果
  3. 文字列型 (str) を使う場合

    • 名前、住所、メッセージなどのテキスト
    • 日付、電話番号(計算に使わない数字)
    • ID ナンバー(先頭の 0 が重要な場合です。int にすると 0 が消えてしまいます)
  4. 真偽値型 (bool) を使う場合

    • はい / いいえで答えられる状態
    • 条件の判定結果

Ex.1 名前と年齢を入力し、「あなたは ◯ 歳です」と表示するプログラム

名前と年齢を入力し、「あなたは ◯ 歳です」と表示するプログラム

# input() 関数を使ってキーボードから入力を受け取る
name = input("お名前を入力してください:")
age: str = input("年齢を入力してください:")

# 入力された年齢は文字列なので、計算するときは数値に変換する
age_num = int(age)

print("こんにちは、" + name + "さん!")
print("あなたは" + age + "歳です")
print("来年は" + str(age_num + 1) + "歳になりますね")

# f-strings を使うと、もっと簡潔に書けます。自動で str に変換してくれます。
print(f"こんにちは、{name}さん!")
print(f"あなたは{age}歳です")
print(f"来年は{age_num + 1}歳になりますね")

チャレンジ!

  • 誕生年を計算して表示してみよう
  • 20 歳まであと何年かを計算してみよう
  • 他にも色々な情報を入力・表示してみよう

Ex.2 2 つの数字を入力し、その合計を「◯ + ◯ = ◯」と表示するプログラム

2 つの数字を入力し、その合計を「◯ + ◯ = ◯」と表示するプログラム

num1 = input("1 つ目の数字を入力してください:")
num2 = input("2 つ目の数字を入力してください:")

num1 = int(num1)
num2 = int(num2)

sum_result = num1 + num2
print(f"{num1} + {num2} = {sum_result}")

チャレンジ!

  • 引き算、掛け算、割り算も計算してみよう
  • 3 つ以上の数字の計算もしてみよう
  • 小数点がある数字も計算してみよう

まとめ

この章では、プログラミングの基礎となる変数とデータ型について学びました。

  • 変数は値を保存する「箱」
  • データ型によって扱い方が変わる
  • 型変換で異なる型のデータを扱える
  • input() で入力を受け取れる