プログラミング

Step 5: 「データ型」の基本(文字列と数値の違い)

Step 5: 「データ型」の基本(文字列と数値の違い)

概要

フリーランスエンジニア スリーネクスト

Pythonプログラミングの基礎である「データ型」について、特に初心者が混同しがちな「数値型」と「文字列型」の違いをテーマに解説します。

まず、それぞれのデータ型の基本的な役割(数値は計算、文字列は文字の表示・連結)をコード例と共に説明。レポートの核心部分では、同じ+記号でもデータ型によって「足し算」と「連結」という全く異なる動作になることを図解し、TypeErrorが発生する原因を明らかにします。

さらに、type()関数によるデータ型の確認方法や、int(), str()といった関数を用いた意図的な型変換(キャスト)の重要性も解説。ユーザー入力を扱う際の注意点など、実践的な知識も学べる内容です。

目次
「ゼロから始めるPython学習」各ステップのタイトル案
ゼロから始めるPython学習 STEP20目次

プログラミング未経験者向けPython入門講座。環境構築から変数、if文、for文、関数といった基本までを20のステップでわかりやすく解説します。自分のペースで一歩ずつ着実に学び、プログラミングの第一歩を踏み出しましょう!

続きを見る

はじめに

プログラミングの世界へようこそ!🐍 これまでのステップで、変数や基本的な命令について学んできましたね。今回は、プログラミングの根幹をなす非常に重要な概念、**「データ型」について深く掘り下げていきましょう。特に、最も基本的な「数値」「文字列」**の違いを理解することは、今後の学習をスムーズに進めるための鍵となります。

データ型ってなんだろう? 🤔

コンピュータは、人間のように「"123"は数字だな」「"あいうえお"は言葉だな」と曖昧に判断することができません。コンピュータがデータを正しく扱うためには、そのデータが**「どんな種類のものか」を明確に教えてあげる必要があります。その「データの種類を示すラベル」がデータ型**です。

例えば、レストランで注文をするとき、「温かいお茶」と「冷たいお茶」では、店員さんの準備の仕方が全く異なりますよね。データ型もこれと同じで、「これは数値だから計算できるように準備しよう」「これは文字列だから文字として扱おう」と、コンピュータがデータの扱い方を決めるための重要な情報なのです。

Pythonには様々なデータ型がありますが、まず絶対に押さえておくべきなのが**「数値型」「文字列型」**です。

graph LR;
    A(データ) --> B("数値型 (Numeric Types)");
    A --> C("文字列型 (String)");
    A --> D(その他のデータ型...);

    subgraph "数値の仲間"
        B --> B1("整数 (int)");
        B --> B2("浮動小数点数 (float)");
    end

    subgraph "文字の仲間"
        C --> C1("例: 'こんにちは'");
        C --> C2("例: 'Hello World'");
        C --> C3("例: '123'");
    end

数値型 (Numeric Types): 計算するためのデータ

数値型は、その名の通り、計算を行うためのデータです。主に2つの種類があります。

  1. 整数 (integer / int): 1, 100, -50, 0 のような、小数点のつかない数字です。
  2. 浮動小数点数 (float): 3.14, 1.23, -0.001 のような、小数点のつく数字です。

数値型の一番の特徴は、四則演算(足し算、引き算、掛け算、割り算)ができることです。

【コード例】

# 整数(int)の計算
a = 10
b = 5
print(a + b)  # 足し算
print(a - b)  # 引き算

# 浮動小数点数(float)の計算
c = 3.14
d = 2.0
print(c * d)  # 掛け算
print(c / d)  # 割り算

【実行結果】

15
5
6.28
1.57

このように、数値型データは数学の数字と同じように、自由に計算することができます。

graph LR;
    subgraph "数値の計算プロセス"
        direction LR
        num1(10) -- 四則演算 (+) --> num2(5);
        num2 -- 結果 (=) --> result(15);
    end

文字列型 (String / str): 文字を扱うためのデータ

文字列型は、文字や文章を扱うためのデータです。「こんにちは」や「Python」のような言葉はもちろんのこと、実は'123'のように数字であっても、シングルクォーテーション(')またはダブルクォーテーション(")で囲まれているものはすべて文字列として扱われます。これが非常に重要なポイントです。

【コード例】

message1 = 'こんにちは、Pythonの世界へ!'
message2 = "Hello World"
number_string = '123' # これは数値ではなく、文字列

print(message1)
print(message2)
print(number_string)

【実行結果】

こんにちは、Pythonの世界へ!
Hello World
123

文字列型は、数値型とは異なる特殊な操作ができます。

  • 連結: + 演算子を使うと、文字列同士をつなげることができます。
  • 繰り返し: * 演算子を使うと、文字列を複数回繰り返すことができます。

【コード例】

greeting = 'こんにちは'
name = '山田さん'

# 文字列の連結
full_message = greeting + '、' + name
print(full_message)

# 文字列の繰り返し
laugh = 'ha' * 3
print(laugh)

【実行結果】

こんにちは、山田さん
hahaha
graph LR;
    subgraph "文字列の連結プロセス"
        str1("こんにちは") -- 連結 (+) --> str2("山田さん");
        str2 -- 結果 (=) --> result("こんにちは山田さん");
    end

【最重要】数値と文字列の決定的な違い

ここが今回の核心です。数値の123と文字列の'123'は、人間には同じに見えても、Pythonにとっては全くの別物です。

最大の違いは、計算できるかどうかです。

  • 数値の + は「足し算」
  • 文字列の + は「連結」

この違いが、予期せぬエラーの大きな原因になります。

graph TD;
    A("「+」演算子") --> B{"データ型をチェック"};
    B --> C["数値型 (int, float)"];
    B --> D["文字列型 (str)"];
    B --> E["違う型同士?"];

    subgraph "数値の場合"
        C -- "足し算を実行" --> C_Result("例: 10 + 5  => 15");
    end

    subgraph "文字列の場合"
        D -- "連結を実行" --> D_Result("例: '10' + '5' => '105'");
    end

    subgraph "型が混在している場合"
        E -- "エラー発生!" --> E_Result("TypeError: 計算も連結もできません");
    end

実際にコードで見てみましょう。

【コード例】

# 数値同士の足し算
num1 = 10
num2 = 5
print(num1 + num2)

# 文字列同士の連結
str1 = '10'
str2 = '5'
print(str1 + str2)

【実行結果】

15
105

衝撃の結果ですね! 10 + 515 ですが、 '10' + '5''10' という文字と '5' という文字をつなげた '105' という全く別の文字列になるのです。

さらに、数値と文字列を直接 + で計算しようとすると、エラーが発生します。

【エラーが発生するコード例】

num_value = 100
str_value = '円'

# 数値と文字列を直接足そうとすると...
print(num_value + str_value)

【実行結果】

TypeError: unsupported operand type(s) for +: 'int' and 'str'

この TypeError は、「int(整数)と str(文字列)を + で計算することはできません!」というPythonからの悲鳴です。コンピュータは、「足し算をすればいいのか?文字を連結すればいいのか?わからないよ!」と混乱してしまうのです。

データ型の確認と変換

では、あるデータがどの型なのかを知りたいときや、型を意図的に変えたいときはどうすればいいのでしょうか?

データ型の確認: type() 関数

type() 関数を使うと、変数やデータの型を簡単に調べることができます。

【コード例】

print(type(123))
print(type(3.14))
print(type('こんにちは'))
print(type('123'))

【実行結果】

<class 'int'>
<class 'float'>
<class 'str'>
<class 'str'>

データ型の変換(キャスト)

型が違うことによるエラーを避けるために、Pythonにはデータ型を変換する機能が用意されています。これをキャストと呼びます。

  • str(): 数値を文字列に変換する
  • int(): 文字列や浮動小数点数を整数に変換する
  • float(): 文字列や整数を浮動小数点数に変換する
graph LR;
    subgraph "型変換(キャスト)"
        A["'200'"(str)] -- int() --> B[200 (int)];
        C[100(int)] -- str() --> D["'100'"(str)];
        E["'3.14'" (str)] -- float() --> F[3.14(float)];
    end

先ほどエラーになった「100円」と表示する例も、型変換を使えば正しく実行できます。

【コード例】

num_value = 100
unit_str = '円'

# num_valueをstr()で文字列に変換してから連結する
result_message = str(num_value) + unit_str
print(result_message)

【実行結果】

100円

特に、ユーザーからのキーボード入力を受け取る input() 関数は、入力されたものが数字であっても、必ず文字列型として扱います。そのため、入力された数値で計算したい場合は、int()float() を使った型変換が必須になります。

【コード例】

# input()で受け取ったデータは必ず文字列型
price_str = input('商品の価格を入力してください: ')
quantity_str = input('数量を入力してください: ')

# 文字列のまま計算しようとすると...?
# print(price_str * quantity_str) # これはエラーになる

# int()で数値に変換してから計算する
price_int = int(price_str)
quantity_int = int(quantity_str)
total_price = price_int * quantity_int

print('合計金額は' + str(total_price) + '円です。')

まとめ

今回は、プログラミングの基礎である「データ型」、特に「数値」と「文字列」の違いについて学びました。

  • データ型は、データの種類を示すラベルであり、コンピュータのデータ処理方法を決定する。
  • 数値型 (int, float) は計算するためのデータ。
  • 文字列型 (str) は文字を扱うためのデータで、'" で囲む。
  • 見た目が同じ数字でも、123 (数値)と '123' (文字列)は全くの別物。
  • + 演算子は、相手のデータ型によって「足し算」になったり「連結」になったりする。
  • 違うデータ型同士(特に数値と文字列)を + で計算しようとすると TypeError が発生する。
  • type() 関数でデータ型を確認できる。
  • int(), str(), float() を使ってデータ型を意図的に変換(キャスト)できる。

このデータ型の違いをしっかり意識することが、バグの少ない、意図した通りに動くプログラムを書くための第一歩です。お疲れ様でした!✨

目次
「ゼロから始めるPython学習」各ステップのタイトル案
ゼロから始めるPython学習 STEP20目次

プログラミング未経験者向けPython入門講座。環境構築から変数、if文、for文、関数といった基本までを20のステップでわかりやすく解説します。自分のペースで一歩ずつ着実に学び、プログラミングの第一歩を踏み出しましょう!

続きを見る

-プログラミング