【2025年版】プログラミング基礎:変数と配列完全ガイド – 初心者でもわかる基本概念から実践まで
変数とは?プログラミングの基本概念
変数(Variable)は、データを格納するためのメモリ上の領域に名前を付けたものです。プログラミングにおいて最も基本的で重要な概念の一つで、すべてのプログラムで使用されます。
変数を学ぶメリット
- データの管理:情報を効率的に保存・操作可能
- プログラムの柔軟性:値を動的に変更できる
- 可読性の向上:意味のある名前でコードが理解しやすい
- 再利用性:同じ値を複数箇所で使用可能
変数の基本的な使い方
1. 変数の宣言と代入
# Python
name = "田中太郎"
age = 25
height = 170.5
is_student = True
// JavaScript
let name = "田中太郎";
let age = 25;
const PI = 3.14159;
var isStudent = true;
// Java
String name = "田中太郎";
int age = 25;
double height = 170.5;
boolean isStudent = true;
2. 変数の更新
# 変数の値を変更
score = 80
print(score) # 80
score = score + 10
print(score) # 90
score += 5 # 短縮記法
print(score) # 95
3. 変数の命名規則
# 良い命名例
user_name = "山田"
total_price = 1500
is_valid = True
MAX_COUNT = 100
# 悪い命名例
a = "山田" # 意味が不明
totalPrice = 1500 # Python では推奨されない
123name = "太郎" # 数字から始まる(エラー)
データ型の基礎
1. 基本データ型
# 数値型
integer_num = 42 # 整数
float_num = 3.14 # 浮動小数点数
# 文字列型
message = "こんにちは"
single_char = 'A'
# 論理型
is_true = True
is_false = False
# 型の確認
print(type(integer_num)) # <class 'int'>
print(type(message)) # <class 'str'>
2. 型変換
# 文字列から数値への変換
str_num = "123"
int_num = int(str_num) # 123
float_num = float(str_num) # 123.0
# 数値から文字列への変換
num = 456
str_num = str(num) # "456"
# 安全な型変換
def safe_int(value):
try:
return int(value)
except ValueError:
return 0
配列(リスト)の基本概念
配列は、同じ種類のデータを順序立てて格納するデータ構造です。複数の値を一つの変数で管理できる便利な仕組みです。
1. 配列の作成と初期化
# Python(リスト)
fruits = ["りんご", "バナナ", "オレンジ"]
numbers = [1, 2, 3, 4, 5]
mixed = ["文字", 123, True]
empty_list = []
// JavaScript
let fruits = ["りんご", "バナナ", "オレンジ"];
let numbers = [1, 2, 3, 4, 5];
let emptyArray = [];
// Java
String[] fruits = {"りんご", "バナナ", "オレンジ"};
int[] numbers = {1, 2, 3, 4, 5};
int[] scores = new int[10]; // 10要素の配列
2. 配列の要素アクセス
fruits = ["りんご", "バナナ", "オレンジ"]
# 要素の取得(0から始まるインデックス)
first_fruit = fruits[0] # "りんご"
last_fruit = fruits[-1] # "オレンジ"(Python の負のインデックス)
# 要素の変更
fruits[1] = "いちご"
print(fruits) # ["りんご", "いちご", "オレンジ"]
3. 配列の基本操作
# 要素の追加
fruits = ["りんご"]
fruits.append("バナナ") # 末尾に追加
fruits.insert(0, "いちご") # 指定位置に挿入
# 要素の削除
fruits.remove("バナナ") # 値で削除
deleted = fruits.pop() # 末尾を削除して取得
del fruits[0] # インデックスで削除
# 配列の長さ
length = len(fruits)
多次元配列
1. 二次元配列の基本
# 二次元配列(行列)
matrix = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
]
# 要素へのアクセス
element = matrix[1][2] # 6(2行目の3列目)
# 行の取得
row = matrix[0] # [1, 2, 3]
2. 実践的な二次元配列
# 成績表の例
students = [
["田中", 85, 92, 78],
["佐藤", 90, 88, 95],
["山田", 76, 84, 89]
]
# 特定の学生の平均点を計算
def calc_average(student_data):
scores = student_data[1:] # 名前以外のスコア
return sum(scores) / len(scores)
for student in students:
avg = calc_average(student)
print(f"{student[0]}の平均点: {avg:.1f}")
配列の応用操作
1. 配列の検索
fruits = ["りんご", "バナナ", "オレンジ", "いちご"]
# 線形検索
def find_fruit(fruits, target):
for i, fruit in enumerate(fruits):
if fruit == target:
return i
return -1
index = find_fruit(fruits, "バナナ") # 1
# Python の組み込み機能
if "バナナ" in fruits:
index = fruits.index("バナナ")
2. 配列のソート
numbers = [64, 34, 25, 12, 22, 11, 90]
# 組み込み関数でソート
sorted_nums = sorted(numbers) # 元の配列は変更されない
numbers.sort() # 元の配列を変更
# 逆順ソート
numbers.sort(reverse=True)
# カスタムソート(学生の成績順)
students = [("田中", 85), ("佐藤", 92), ("山田", 78)]
students.sort(key=lambda x: x[1], reverse=True) # 成績順
3. 配列のフィルタリング
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
# 偶数のみ抽出
even_numbers = [n for n in numbers if n % 2 == 0]
# 関数を使った方法
def is_even(n):
return n % 2 == 0
even_numbers = list(filter(is_even, numbers))
# 条件に基づく変換
squared_evens = [n**2 for n in numbers if n % 2 == 0]
実践的な配列の使用例
1. ショッピングカートシステム
class ShoppingCart:
def __init__(self):
self.items = []
def add_item(self, name, price, quantity=1):
item = {"name": name, "price": price, "quantity": quantity}
self.items.append(item)
def get_total(self):
total = 0
for item in self.items:
total += item["price"] * item["quantity"]
return total
def show_items(self):
for item in self.items:
print(f"{item['name']}: ¥{item['price']} x {item['quantity']}")
# 使用例
cart = ShoppingCart()
cart.add_item("りんご", 100, 3)
cart.add_item("バナナ", 80, 2)
print(f"合計: ¥{cart.get_total()}")
2. 学生成績管理システム
def analyze_scores(scores):
if not scores:
return None
total = sum(scores)
average = total / len(scores)
highest = max(scores)
lowest = min(scores)
return {
"平均": average,
"最高点": highest,
"最低点": lowest,
"合計": total
}
# 使用例
math_scores = [85, 92, 78, 96, 88, 74, 90]
result = analyze_scores(math_scores)
for key, value in result.items():
print(f"{key}: {value}")
3. データ集計とグループ化
def group_by_category(data, key):
groups = {}
for item in data:
category = item[key]
if category not in groups:
groups[category] = []
groups[category].append(item)
return groups
# 売上データの例
sales_data = [
{"商品": "りんご", "カテゴリ": "果物", "売上": 1000},
{"商品": "にんじん", "カテゴリ": "野菜", "売上": 800},
{"商品": "バナナ", "カテゴリ": "果物", "売上": 1200},
]
grouped = group_by_category(sales_data, "カテゴリ")
for category, items in grouped.items():
total = sum(item["売上"] for item in items)
print(f"{category}: ¥{total}")
よくある間違いと対策
間違い1:インデックスの範囲外アクセス
# 悪い例
numbers = [1, 2, 3]
print(numbers[5]) # IndexError
# 良い例
def safe_get(arr, index, default=None):
if 0 <= index < len(arr):
return arr[index]
return default
result = safe_get(numbers, 5, "存在しません")
間違い2:リストの参照による予期しない変更
# 問題のあるコード
original = [1, 2, 3]
copy = original # 参照のコピー
copy.append(4)
print(original) # [1, 2, 3, 4] 元のリストも変更される
# 正しい方法
original = [1, 2, 3]
copy = original.copy() # または original[:]
copy.append(4)
print(original) # [1, 2, 3] 元のリストは変更されない
間違い3:変数名の命名ミス
# 悪い例
l = [1, 2, 3] # 'l' は '1' と区別しにくい
data = [1, 2, 3] # 抽象的すぎる
# 良い例
scores = [85, 90, 78] # 具体的で意味が分かる
user_ages = [25, 30, 35]
パフォーマンス考慮事項
配列操作の計算量
# O(1) - 定数時間
arr[0] # インデックスアクセス
arr.append(value) # 末尾への追加
# O(n) - 線形時間
arr.insert(0, value) # 先頭への挿入
arr.remove(value) # 値による削除
value in arr # 線形検索
# 効率的な操作
from collections import deque
queue = deque([1, 2, 3])
queue.appendleft(0) # O(1) で先頭に追加
メモリ効率の改善
# リスト内包表記(メモリ効率的)
squares = [x**2 for x in range(1000) if x % 2 == 0]
# ジェネレータ(さらに効率的)
def squares_generator():
for x in range(1000):
if x % 2 == 0:
yield x**2
squares = squares_generator()
学習ステップとロードマップ
初級レベル(1-2週間)
- 変数の宣言と代入の理解
- 基本データ型の使い分け
- 配列の作成と要素アクセス
- 基本的な配列操作(追加、削除)
中級レベル(3-4週間)
- 多次元配列の操作
- 配列の検索とソート
- リスト内包表記の活用
- 配列を使ったデータ処理
上級レベル(2-3ヶ月)
- 高度なデータ構造の理解
- パフォーマンスを考慮した実装
- アルゴリズムとデータ構造の組み合わせ
- 実践的なアプリケーション開発
実践練習問題
- 基礎練習:配列の要素合計、平均計算
- 中級練習:配列のソートアルゴリズム実装
- 上級練習:複雑なデータ構造を使った問題解決
まとめ
変数と配列は、プログラミングの基礎中の基礎です。これらの概念をしっかりと理解することで、より複雑なプログラムを作成できるようになります。
重要なのは、適切な命名規則を守り、データの型を意識してプログラムを書くことです。また、配列の操作では、インデックスの範囲外アクセスに注意し、効率的なアルゴリズムを選択することが大切です。
実際のプロジェクトでは、これらの基本概念を組み合わせて、ユーザーに価値を提供するアプリケーションを構築していきます。継続的な練習を通じて、プログラミングスキルを向上させていきましょう。
■プロンプトだけでオリジナルアプリを開発・公開してみた!!
■AI時代の第一歩!「AI駆動開発コース」はじめました!
テックジム東京本校で先行開始。
■テックジム東京本校
「武田塾」のプログラミング版といえば「テックジム」。
講義動画なし、教科書なし。「進捗管理とコーチング」で効率学習。
より早く、より安く、しかも対面型のプログラミングスクールです。
<短期講習>5日で5万円の「Pythonミニキャンプ」開催中。
<月1開催>放送作家による映像ディレクター養成講座
<オンライン無料>ゼロから始めるPython爆速講座



