変数とデータ型(数値、文字列、真偽値)
2025-10-17はじめに
この内容では、プログラミングの基礎となる「変数」と「データ型」について学びます。
これらはプログラミングのABCとも言える重要な概念です。
しっかり理解することで、より複雑なプログラムを作成できるようになります。
変数とは
変数は、データを格納する「箱」のようなものです。

例えば、本棚に本を整理するように、プログラムではデータを変数に格納して管理します。
変数の基本
Pythonで変数を使用するには、変数名と代入演算子=を使います。
# 変数の例
name = "山田太郎"
age = 25
is_student = True
ここでは、name、age、is_studentという3つの変数を作成し、それぞれにデータを格納しています。
変数名のルール
変数名をつけるときには以下のルールに従います。
- 英数字とアンダースコア(_)が使用できます
- 数字で始めることはできません
- 大文字と小文字は区別されます
- Pythonの予約語(
if、forなど)は使用できません
良い例
user_name に文字列「太郎」、count1 に数値10、_total に数値100をそれぞれ代入しています。
user_name = "太郎"
count1 = 10
_total = 100
悪い例
1st_place は数字で始まっているため、user-name はハイフンを含むため、if は予約語のため、いずれも変数名として使用できません。
1st_place = "優勝" # 数字で始まっている
user-name = "花子" # ハイフンは使用不可
if = 10 # 予約語は使用不可
データ型の基本
Pythonには様々なデータ型がありますが、ここでは基本的な3つのデータ型を学びます。

数値型(Numeric Types)
数値型は、数字を扱うためのデータ型です。主に以下の種類があります:
整数(int)
整数を扱います。正の数、負の数、ゼロすべてを含みます。
# 整数の例
age = 30
temperature = -5
count = 0
population = 1000000
# 計算例
result = 10 + 5 # 足し算
difference = 20 - 8 # 引き算
product = 6 * 7 # 掛け算
quotient = 15 / 3 # 割り算(結果は浮動小数点数)
floor_division = 15 // 4 # 切り捨て除算(結果は3)
remainder = 15 % 4 # 剰余(余り、結果は3)
power = 2 ** 3 # べき乗(2の3乗、結果は8)
浮動小数点数(float)
小数点以下の数値を扱います。
# 浮動小数点数の例
height = 175.5
weight = 68.2
pi = 3.14159
temperature = 36.6
# 計算例
result = 10.5 + 3.2 # 13.7
result = 5.0 / 2.0 # 2.5
複素数(complex)
実数部と虚数部からなる数値です。科学技術計算などで使用されます。complex_number に実部が3、虚部が4の複素数 3 + 4j を代入しています。
# 複素数の例
complex_number = 3 + 4j
文字列型(String)
文字列型は、文字の並びを扱うデータ型です。
シングルクォート'またはダブルクォート"で囲んで表現します。
# 文字列の例
name = "山田花子"
message = 'こんにちは、世界!'
empty_string = ""
文字列の操作
文字列に対して様々な操作を行うことができます。
# 文字列の連結
greeting = "こんにちは" + "、" + "世界!"
print(greeting) # こんにちは、世界!
# 文字列の繰り返し
stars = "*" * 10
print(stars) # **********
# 文字列の長さ
text = "Python"
length = len(text)
print(length) # 6
# 文字列の一部取り出し(スライス)
text = "プログラミング"
print(text[0]) # プ(最初の文字)
print(text[0:3]) # プログラ(0番目から2番目まで)
print(text[-1]) # グ(最後の文字)
# 文字列のメソッド
message = " Hello, World! "
print(message.lower()) # " hello, world! "(小文字に変換)
print(message.upper()) # " HELLO, WORLD! "(大文字に変換)
print(message.strip()) # "Hello, World!"(前後の空白除去)
print(message.replace("Hello", "Hi")) # " Hi, World! "
f-string(フォーマット文字列)
Python 3.6以降では、f-stringを使って変数の値を文字列に簡単に埋め込むことができます。Pythonの print(f"...") における f は「フォーマット済み文字列リテラル(f-string)」 を意味し、文字列の中に変数や式を直接埋め込むために必要です。
name = "太郎"
age = 20
message = f"{name}さんは{age}歳です。"
print(message) # 太郎さんは20歳です。
# 計算も可能
a = 5
b = 3
result = f"{a} + {b} = {a + b}"
print(result) # 5 + 3 = 8
つまり{name} や {age} が変数の中身に置き換えられて出力される。
真偽型(Boolean)
ブーリアン型は、真(True)または偽(False)の2つの値のみを取るデータ型です。
条件分岐やループ処理などでよく使用されます。
# ブーリアン型の例
is_raining = True
is_sunny = False
is_adult = age >= 20 # 条件式の結果を格納
ブーリアン演算
ブーリアン値に対して論理演算を行うことができます。ブーリアン演算(Boolean演算)とは、真(True)か偽(False)の2つの値を使って行う論理演算のことです。
# 論理演算の例
is_weekend = True
is_holiday = False
# and(論理積):両方がTrueの場合のみTrue
can_rest = is_weekend and is_holiday # False
# or(論理和):少なくとも一方がTrueの場合True
can_rest = is_weekend or is_holiday # True
# not(否定):TrueとFalseを反転
is_weekday = not is_weekend # False
比較演算子
ブーリアン値は、比較演算子を使用して生成されることが多いです。
# 比較演算子の例
x = 10
y = 5
print(x == y) # False(等しい)
print(x != y) # True(等しくない)
print(x > y) # True(より大きい)
print(x < y) # False(より小さい)
print(x >= y) # True(以上)
print(x <= y) # False(以下)
型の確認と変換
print()関数
print 関数は、Pythonで文字や数値を画面に表示するための命令です。プログラムの結果を確認したり、途中の値を調べたりするときによく使われます。文字を表示するときは " " で囲みます。数値はそのまま書けます。
print("こんにちは") // こんにちは
print(10) // 10
name = "田中"
age = 20
print(name) // 田中
print(age) // 20
print("年齢は", age, "歳です") // 年齢は 20 歳です
また、カンマで区切ると複数の内容をまとめて表示できます。Python学習では最初に使うことが多く、プログラムの動きを確認する基本となる関数です。同じようにprint()関数の中にf-stringsを宣言するパターンです。
# 変数に値を代入
name = "田中"
age = 20
# f-stringを使って表示
print(f"私は{name}です。{age}歳です。")
Pythonのprint()関数におけるfは、「f文字列(f-strings:formatted string literals)」と呼ばれる、文字列の中に変数や式を直接埋め込むための便利な機能の宣言です。
型の確認
type()関数を使用して、変数のデータ型を確認できます。
# 型の確認
name = "山田太郎"
age = 25
is_student = True
height = 170.5
print(type(name)) #
print(type(age)) #
print(type(is_student)) #
print(type(height)) #
型の変換
データ型を変換するための関数があります。
# 型変換の例
number_str = "100"
number_int = int(number_str) # 文字列を整数に変換
print(number_int) # 100
float_str = "3.14"
float_num = float(float_str) # 文字列を浮動小数点数に変換
print(float_num) # 3.14
number = 50
number_str = str(number) # 数値を文字列に変換
print(number_str) # "50"
bool_str = "True"
bool_value = bool(bool_str) # 文字列をブーリアンに変換
print(bool_value) # True
# 注意:空文字列や0はFalseと評価される
print(bool("")) # False
print(bool(0)) # False
print(bool("0")) # True(文字列の"0"は空ではない)
変数の再代入と動的型付け
Pythonは動的型付け言語です。
これは、変数の型を宣言する必要がなく、同じ変数に異なる型の値を代入できることを意味します。
# 動的型付けの例
variable = 10
print(variable) # 10
print(type(variable)) #
variable = "文字列"
print(variable) # 文字列
print(type(variable)) #
variable = True
print(variable) # True
print(type(variable)) #
定数の概念
Pythonには厳密な定数の概念はありませんが、大文字の変数名を使用して定数であることを示す慣習があります。
# 定数の例(慣習的に大文字を使用)
PI = 3.14159
MAX_USERS = 100
DEFAULT_TIMEOUT = 30
変数のスコープ
変数が参照できる範囲のことをスコープと言います。
詳細は関数の学習時に詳しく学びますが、基本的には変数が定義された場所によって参照できる範囲が決まります。
# グローバルスコープの変数
global_variable = "グローバル"
def my_function():
# ローカルスコープの変数
local_variable = "ローカル"
print(global_variable) # グローバル変数は参照可能
print(local_variable) # ローカル変数も参照可能
my_function()
print(global_variable) # グローバル変数は参照可能
# print(local_variable) # エラー:ローカル変数は参照できない
まとめ
この講義ではPythonの基本的な変数とデータ型について学びました。
変数はデータを格納する箱のような役割を果たします。
主なデータ型には、整数(int)・浮動小数点数(float)・複素数(complex)といった数値型、テキストを扱う文字列型(str)、TrueまたはFalseの値を取るブーリアン型(bool)があります。
データ型はtype()関数で確認可能です。Pythonは動的型付け言語であるため、変数の型を明示的に宣言する必要がない点が特徴です。
これらの基礎概念は、これから学ぶ条件分岐、ループ処理、関数など、すべてのプログラミング概念の土台となります。しっかり理解して次のステップに進みましょう。
演習問題
初級問題(3問)
問題1
以下のコードを実行したとき、変数aとbのデータ型は何になりますか?
また、実行結果はどうなりますか?
a = 10 + 5
b = "10" + "5"
print(a)
print(b)
問題2
半径が5cmの円の面積を計算するプログラムを作成してください。
円周率は3.14とします。結果は「円の面積は○○平方cmです」と表示してください。
実行結果:
円の面積は78.5平方cmです
問題3
以下の条件を満たすプログラムを作成してください。
- 変数
ageに自分の年齢を数値で代入 - 変数
nameに自分の名前を文字列で代入 - これらの変数を使って「私は○○です。××歳です。」という文章をf-stringで表示
実行結果:
私は山田太郎です。25歳です。
中級問題(6問)
問題4
2つの数値変数xとyがあります。これらの値の和、差、積、商を計算し、以下の形式で表示するプログラムを作成してください。
x + y = 結果
x - y = 結果
x * y = 結果
x / y = 結果
実行結果:
15 + 3 = 18
15 - 3 = 12
15 * 3 = 45
15 / 3 = 5.0
問題5
文字列"Python Programming"に対して以下の操作を行うプログラムを作成してください。
- 文字列をすべて大文字に変換
- 文字列をすべて小文字に変換
- 文字列中の"Python"を"Java"に置換
- 文字列の長さを表示
実行結果:
大文字: PYTHON PROGRAMMING
小文字: python programming
置換後: Java Programming
文字列の長さ: 18
問題6
ユーザーから入力された2つの数値の大小関係を比較するプログラムを作成してください。
2つの数値が等しいか、どちらが大きいかを表示してください。
実行結果:
1つ目の数値を入力してください: 8
2つ目の数値を入力してください: 11
8.0 は 11.0 より小さいです
問題7
以下の条件を判断するプログラムを作成してください。
- 変数
temperatureに気温(数値)を代入 - 気温が25度以上なら「暑い」
- 気温が10度以上25度未満なら「快適」
- 気温が10度未満なら「寒い」
- と表示するプログラムを作成
実行結果:
# 22度と入力したら
快適
問題8
与えられた文字列が回文(前から読んでも後ろから読んでも同じ)かどうかを判定するプログラムを作成してください。
回文の例:「たけやぶやけた」
ヒント:テキストを逆(回文)にするには
text = "たけやぶやけた"
reversed_text = text[::-1]
問題9
3つのブーリアン変数a、b、cがあります。
これらの値の組み合わせに対して、(a AND b) OR (NOT c)の真理値表を表示するプログラムを作成してください。
実行結果:
a b c (a AND b) OR (NOT c)
----------------------------------------
False False False True
False False True False
False True False True
False True True False
True False False True
True False True False
True True False True
True True True True
ヒントは以下の通り!
a = False; b = False; c = False
print(f"{a}\t{b}\t{c}\t{(a and b) or (not c)}")
上級問題(3問)
問題10
与えられた秒数を「時間:分:秒」の形式に変換するプログラムを作成してください。
例えば、3665秒は「1:1:5」と表示します。
- 時間:3665 ÷ 3600 = 1時間
- 残り:3665 % 3600 = 65秒
- 分:65 ÷ 60 = 1分
- 秒:65 % 60 = 5秒
実行結果は次のとおりです。
3665秒 = 1:1:5
問題11
西暦年を入力すると、その年がうるう年かどうかを判定するプログラムを作成してください。
うるう年の条件:
- 4で割り切れる年はうるう年
- ただし、100で割り切れる年はうるう年ではない
- ただし、400で割り切れる年はうるう年
実行結果:
西暦年を入力してください: 2026
2026年はうるう年ではありません
西暦年を入力してください: 2024
2024年はうるう年です
問題12
与えられた10進数の数値を2進数(文字列)に変換するプログラムを作成してください。
最後に組込み関数bin()は使用して、アルゴリズムと同じであることを検証してください。
実行結果:
10進数 25 は 2進数で 11001 です
検証: bin(25) = 11001
解答例
初級問題 解答
問題1
a = 10 + 5
b = "10" + "5"
print(a)
print(b)
実行結果:
15
105
解説:
- 変数
aは整数型(int)で、数値の足し算の結果15が格納されます - 変数
bは文字列型(str)で、文字列の連結の結果"105"が格納されます +演算子は数値では加算、文字列では連結として機能します
問題2 解答
# 半径と円周率の設定
radius = 5
pi = 3.14
# 円の面積を計算
area = pi * radius * radius
# 結果を表示
print(f"円の面積は{area}平方cmです")
別解:
radius = 5
pi = 3.14
area = pi * radius ** 2
print("円の面積は" + str(area) + "平方cmです")
実行結果:
円の面積は78.5平方cmです
問題3 解答
# 変数に値を代入
age = 25
name = "山田太郎"
# f-stringを使って表示
print(f"私は{name}です。{age}歳です。")
実行結果:
私は山田太郎です。25歳です。
中級問題 解答
問題4 解答
# 2つの数値を設定
x = 15
y = 3
# 計算結果を表示
print(f"{x} + {y} = {x + y}")
print(f"{x} - {y} = {x - y}")
print(f"{x} * {y} = {x * y}")
print(f"{x} / {y} = {x / y}")
実行結果:
15 + 3 = 18
15 - 3 = 12
15 * 3 = 45
15 / 3 = 5.0
問題5 解答
text = "Python Programming"
# 各種文字列操作
upper_text = text.upper()
lower_text = text.lower()
replaced_text = text.replace("Python", "Java")
text_length = len(text)
# 結果を表示
print(f"大文字: {upper_text}")
print(f"小文字: {lower_text}")
print(f"置換後: {replaced_text}")
print(f"文字列の長さ: {text_length}")
実行結果:
大文字: PYTHON PROGRAMMING
小文字: python programming
置換後: Java Programming
文字列の長さ: 18
問題6 解答
# ユーザーからの入力を受け取る
num1 = float(input("1つ目の数値を入力してください: "))
num2 = float(input("2つ目の数値を入力してください: "))
# 大小関係を比較
if num1 == num2:
print("2つの数値は等しいです")
elif num1 > num2:
print(f"{num1} は {num2} より大きいです")
else:
print(f"{num1} は {num2} より小さいです")
実行例:
1つ目の数値を入力してください: 10
2つ目の数値を入力してください: 5
10.0 は 5.0 より大きいです
問題7 解答
# 気温を設定
temperature = 22
# 条件に応じてメッセージを表示
if temperature >= 25:
print("暑い")
elif temperature >= 10:
print("快適")
else:
print("寒い")
別解(ユーザー入力版):
temperature = float(input("気温を入力してください: "))
if temperature >= 25:
print("暑い")
elif temperature >= 10:
print("快適")
else:
print("寒い")
実行結果(temperature = 22の場合):
快適
問題8 解答
text = "たけやぶやけた"
reversed_text = text[::-1]
if text == reversed_text:
print(f"「{text}」は回文です")
else:
print(f"「{text}」は回文ではありません")
実行結果:
「たけやぶやけた」は回文です
「たけやぶやけだ」は回文ではありません
問題9 解答
print("a b c (a AND b) OR (NOT c)")
print("----------------------------------------")
# 1つ目の組み合わせ
a = False
b = False
c = False
result = (a and b) or (not c)
print(a, b, c, result)
# 2つ目の組み合わせ
a = False
b = False
c = True
print(a, b, c, result)
# 3つ目の組み合わせ
a = False
b = True
c = False
print(a, b, c, result)
# 4つ目の組み合わせ
a = False
b = True
c = True
print(a, b, c, result)
# 5つ目の組み合わせ
a = True
b = False
c = False
print(a, b, c, result)
# 6つ目の組み合わせ
a = True
b = False
c = True
print(a, b, c, result)
# 7つ目の組み合わせ
a = True
b = True
c = False
print(a, b, c, result)
# 8つ目の組み合わせ
a = True
b = True
c = True
print(a, b, c, result)
別解(タブ入力 \t 版):
print("a\tb\tc\t(a AND b) OR (NOT c)")
print("-" * 40)
a = False; b = False; c = False
print(f"{a}\t{b}\t{c}\t{(a and b) or (not c)}")
a = False; b = False; c = True
print(f"{a}\t{b}\t{c}\t{(a and b) or (not c)}")
a = False; b = True; c = False
print(f"{a}\t{b}\t{c}\t{(a and b) or (not c)}")
a = False; b = True; c = True
print(f"{a}\t{b}\t{c}\t{(a and b) or (not c)}")
a = True; b = False; c = False
print(f"{a}\t{b}\t{c}\t{(a and b) or (not c)}")
a = True; b = False; c = True
print(f"{a}\t{b}\t{c}\t{(a and b) or (not c)}")
a = True; b = True; c = False
print(f"{a}\t{b}\t{c}\t{(a and b) or (not c)}")
a = True; b = True; c = True
print(f"{a}\t{b}\t{c}\t{(a and b) or (not c)}")
実行結果:
a b c (a AND b) OR (NOT c)
----------------------------------------
False False False True
False False True False
False True False True
False True True False
True False False True
True False True False
True True False True
True True True True
上級問題 解答
問題10 解答
# テスト
total_seconds = 3665
# 時間、分、秒を計算
hours = total_seconds // 3600
minutes = (total_seconds % 3600) // 60
seconds = total_seconds % 60
# 結果を表示
result = f"{hours}:{minutes}:{seconds}"
print(f"{total_seconds}秒 = {result}")
実行結果:
3665秒 = 1:1:5
問題11 解答
# ユーザー入力を受け取る
year = int(input("西暦年を入力してください: "))
# うるう年の条件をチェック
if year % 400 == 0:
is_leap = True
elif year % 100 == 0:
is_leap = False
elif year % 4 == 0:
is_leap = True
else:
is_leap = False
# 結果を表示
if is_leap:
print(f"{year}年はうるう年です")
else:
print(f"{year}年はうるう年ではありません")
実行例:
西暦年を入力してください: 2024
2024年はうるう年です
問題12 解答
# テスト
decimal_number = 25
# 0の場合の処理
if decimal_number == 0:
binary_result = "0"
else:
binary_digits = []
num = decimal_number
# 2で割り続けて余りを記録
while num > 0:
remainder = num % 2
binary_digits.append(str(remainder))
num = num // 2
# 余りを逆順にして結合
binary_result = ''.join(binary_digits[::-1])
# 結果を表示
print(f"10進数 {decimal_number} は 2進数で {binary_result} です")
# 検証(組み込み関数と比較)
print(f"検証: bin({decimal_number}) = {bin(decimal_number)[2:]}")
別解(再帰関数を利用):
def decimal_to_binary_recursive(n):
if n == 0:
return ""
return decimal_to_binary_recursive(n // 2) + str(n % 2)
def decimal_to_binary(n):
if n == 0:
return "0"
return decimal_to_binary_recursive(n)
# テスト
decimal_number = 25
binary_result = decimal_to_binary(decimal_number)
print(f"10進数 {decimal_number} は 2進数で {binary_result} です")
実行結果:
10進数 25 は 2進数で 11001 です
検証: bin(25) = 11001