Pythonプログラミング入門

【概要】

このドキュメントは、Pythonプログラミングの基本的な用語と概念を解説する。開発環境の準備から始め、変数・演算子・入出力・制御構造・リスト・数学関数・アルゴリズム・外部ライブラリの活用までを、具体的なコード例とともに説明する。

Pythonはインストール不要のオンライン環境(GDBonline)ですぐに試せる。Windowsへのインストールも手順に従えば完了できる。プログラムはエディタで .py ファイルとして作成し、コマンドプロンプトから python ファイル名.py で実行する。

Pythonの基本的な書き方として、インデントでブロックの範囲を示すこと、# でコメントを書くことを押さえておく。データは変数に保存し、型宣言は不要である。処理の流れはif文・while文・for文で制御する。複数のデータはリストにまとめて管理する。数学計算には math モジュール、数値計算には NumPy、グラフ描画には Matplotlib を使う。

Python言語の特徴機能と用語集:別ページに掲載している。

スライド資料:[PDF], [パワーポイント]

YouTube動画:https://youtu.be/DzLTh9anXTE

1. 開発環境

Pythonを実行するための基盤となる環境をPython実行環境と呼ぶ。コマンドプロンプトのような基本的なものから高度な統合開発環境まで、複数の環境での実行が可能であり、目的に応じて選択できる。作業内容に適した環境を選ぶことで、開発効率が大きく向上する。

1-1. 実行方法の選択

オンライン環境Windowsにインストール
インストール不要必要
手軽さ◎ ブラウザだけで使える○ 一度設定すれば快適
向いている用途学習・動作確認本格的な開発

1-2. オンライン環境

GDBonline

多数のプログラミング言語をサポートするオンライン開発環境である。ブラウザで以下のURLを開くだけで使える。

https://www.onlinegdb.com/online_python_compiler

「Run」ボタンで実行、「Stop」ボタンで停止する。

Google Colaboratory

Google Colaboratoryのノートブックをオンラインで利用できる開発環境である。グラフ表示や画像表示が可能で、AIに関連する多くのパッケージが事前にインストールされている。Google Driveとの統合により、データの保存と共有が容易である。

https://colab.research.google.com/

コードセル左側の「▷(再生)」ボタンまたはShift+Enterキーでセルを実行し、実行中は「■(停止)」ボタンで中断できる。

Google ColaboratoryにはGemini(GoogleのAIモデル)によるAI支援機能が統合されている。コードの自動補完およびAIチャットによるコードの生成・説明が利用できる。

Google Colaboratoryではノートブック形式でプログラムを管理する。ノートブック形式とは、プログラムコード・実行結果・説明文・画像・数式などを1つのファイルにまとめて保存できる形式である。高い再現性を持ち、実行の一連の手順を記録して後から確認できるため、ドキュメント化と結果の共有に適している。

ノートブックはコードセルとテキストセルから構成される。コードセルはプログラムコードを記述するための区画であり、個別に実行が可能で、実行結果はセルの直下に表示される。テキストセルは説明文や数式を記述するための区画であり、マークダウン形式でテキストを記述でき、プログラムの説明や実行結果の解説を含めることができる。

Trinket

教育目的に適したオンライン開発環境である。タートルグラフィックスをサポートし、作成したプログラムを他者が容易に実行できる特徴がある。ウェブブラウザ上で即座にプログラミングを開始できる。

https://trinket.io/python3

「Run」ボタンで実行、「Stop」ボタンで停止する。

Python Tutor

プログラムの学習に特化したオンライン開発環境である。変数の値の変化やステップ実行をビジュアルに表示でき、プログラムの動作を視覚的に理解できる。コードの実行過程を1行ずつ確認できる機能が特徴である。

https://pythontutor.com/

「Visualize Execution」ボタンで実行を開始し、「Forward」ボタンでステップを進める。最終ステップに達した時点で実行が終了する。

1-3. 統合開発環境

プログラムの作成・編集・実行から結果表示まで、開発に必要な機能を一つのソフトウェアにまとめた環境である。Windsurf、Cursor、Visual Studio Code、Spyderなどが代表的である。

近年の統合開発環境はAI支援機能を備えるものが増えている。WindsurfはCascadeと呼ばれるAIエージェント機能を中核に据えており、コードベース全体の文脈を参照したコードの生成・編集が可能である。Visual Studio CodeはGitHub Copilotと統合しており、コードの自動補完とAIチャットによるコードの生成・説明を利用できる。

統合開発環境は以下の支援機能を備え、効率的なプログラム開発を実現する。

シンタックスハイライトは、プログラムのコード内の要素を色分けして表示する機能である。キーワード・変数・文字列などを異なる色で表示することで、コードの可読性を向上させ、エラーの発見を容易にする。

自動補完は、プログラムコードの入力支援機能である。変数名や関数名の一部を入力すると予測される候補が表示され、選択することでコードを完成できる。入力の効率化とタイプミスの防止に役立つ。

自動インデントは、プログラムの構造を視覚的に分かりやすくする機能である。制御構文やループ、関数定義などで適切な字下げを自動的に行い、コードの階層構造を明確にする。

デバッグ機能は、プログラムの不具合を発見し修正するための機能である。変数の値の確認や実行過程の追跡が可能で、コード開発とエラー修正を支援する。デバッグ機能では以下の2種類の実行方式を利用できる。

ステップ実行は、プログラムを1行ずつ実行し、その時点での変数の値の変化を確認できる実行方式である。プログラムの動作を細かく追跡でき、不具合の発生箇所の特定やプログラムの学習に有用である。通常実行は、プログラムを最初から最後まで一度に実行する方式である。プログラム実行中の変数の値の変化を確認することは困難だが、完成したプログラムの実行に適している。

1-4. WindowsへのPythonインストール

以下のいずれかの方法で Python 3.12 をインストールする。Python がインストール済みの場合、この手順は不要である。

方法1:winget によるインストール

管理者権限コマンドプロンプトで以下を実行する。管理者権限のコマンドプロンプトを起動するには、Windows キーまたはスタートメニューから「cmd」と入力し、表示された「コマンドプロンプト」を右クリックして「管理者として実行」を選択する。

winget install -e --id Python.Python.3.12 --scope machine --silent --accept-source-agreements --accept-package-agreements --override "/quiet InstallAllUsers=1 PrependPath=1 AssociateFiles=1 InstallLauncherAllUsers=1"

--scope machine を指定することで、システム全体(全ユーザー向け)にインストールされる。このオプションの実行には管理者権限が必要である。インストール完了後、コマンドプロンプトを再起動すると PATH が自動的に設定される。

方法2:インストーラーによるインストール

  1. Python 公式サイト(https://www.python.org/downloads/)にアクセスし、「Download Python 3.x.x」ボタンから Windows 用インストーラーをダウンロードする。
  2. ダウンロードしたインストーラーを実行する。
  3. 初期画面の下部に表示される「Add python.exe to PATH」に必ずチェックを入れてから「Customize installation」を選択する。このチェックを入れ忘れると、コマンドプロンプトから python コマンドを実行できない。
  4. 「Install Python 3.xx for all users」にチェックを入れ、「Install」をクリックする。

インストールの確認

コマンドプロンプトで以下を実行する。

python --version

バージョン番号(例:Python 3.12.x)が表示されればインストール成功である。「'python' は、内部コマンドまたは外部コマンドとして認識されていません。」と表示される場合は、インストールが正常に完了していない。

1-5. AIエディタ Windsurf のインストール(Windows 上)

Pythonプログラムの編集・実行には、AIエディタの利用を推奨する。ここでは、Windsurfのインストールを説明する。Windsurf がインストール済みの場合、この手順は不要である。

管理者権限コマンドプロンプトで以下を実行する。管理者権限のコマンドプロンプトを起動するには、Windows キーまたはスタートメニューから「cmd」と入力し、表示された「コマンドプロンプト」を右クリックして「管理者として実行」を選択する。

winget install -e --id Codeium.Windsurf --scope machine --accept-source-agreements --accept-package-agreements --override "/VERYSILENT /NORESTART /MERGETASKS=!runcode,addtopath,associatewithfiles,!desktopicon"
powershell -Command "$env:Path=[System.Environment]::GetEnvironmentVariable('Path','Machine')+';'+[System.Environment]::GetEnvironmentVariable('Path','User'); windsurf --install-extension MS-CEINTL.vscode-language-pack-ja --force; windsurf --install-extension ms-python.python --force; windsurf --install-extension Codeium.windsurfPyright --force"

--scope machine を指定することで、システム全体(全ユーザー向け)にインストールされる。このオプションの実行には管理者権限が必要である。インストール完了後、コマンドプロンプトを再起動すると PATH が自動的に設定される。

関連する外部ページ

Windsurf の公式ページ: https://windsurf.com/

1-6. プログラムの作成・保存・実行

対話的実行(コマンドプロンプト)

コマンドプロンプトは最も基本的なPython実行環境であり、Windowsでは python コマンドで起動する。プログラムを入力するたびに結果が得られる対話的実行が特徴で、exit() コマンドで終了する。

ファイルの作成

エディタ(メモ帳でも可)でプログラムを書き、拡張子 .py で保存する。メモ帳で保存する場合は「名前を付けて保存」で「ファイルの種類」を「すべてのファイル」に変更してから hello.py のように保存する(変更しないと hello.py.txt となる)。

# ファイル名:hello.py
print("Hello, Python!")
x = 10
print(x)

実行

hello.py を保存したフォルダをコマンドプロンプトで開き、以下を入力する。

python hello.py

プログラム内からの強制終了

import sys
sys.exit(0)  # 0 は「正常終了」を意味する

2. プログラムの基本要素

コメント

# から行末までがコメントになる。コメントは実行されない。コードの理解を助けるために使う。

# これはコメント
x = 10  # 変数xに10を代入

インデント(字下げ)

Pythonではインデントでブロックの範囲を示す。インデントは必須。通常はスペース4つを使う。インデントがないとエラーになる。

if condition:
    print("True")  # インデントされたブロック

3. 変数と演算子

変数

変数はデータを保存する場所である。Pythonでは型宣言は不要で、値を代入すると変数が作られる。型は値に応じて決まる。整数は int、小数は float、文字列は str 型になる。

count = 0
count = count + 1
price = 299.99
name = "Python"

四則演算

加算(+)、減算(-)、乗算(*)、除算(/)を行う。計算の優先順位は数学の規則に従う。整数除算(//)は結果を床関数(小数点以下切り捨て)で整数に変換した値を返す。負の数では注意が必要(例:-7 // 2-4)。

result = (5 + 3) * 4 // 2 - 1
# 例:5 // 2 → 2、7 / 2 → 3.5

比較演算子

2つの値を比較する。結果は True または False(bool型)になる。

演算子意味
<小なり
>大なり
==等しい
<=以下
>=以上
!=等しくない
is_adult = (age >= 20)

論理演算子

複数の条件を組み合わせる。and は両方が真のとき真になる。or はいずれかが真のとき真になる。not は真偽を反転する。

is_valid = (age >= 0 and age <= 120)

4. 入出力処理

キーボード入力

input() はキーボードからの入力を受け取り、文字列として返す。数値として使うには int() または float() で変換する。

age = int(input())      # 整数として受け取る
value = float(input())  # 小数として受け取る

print関数

画面にメッセージを表示して改行する。

print("計算結果:" + str(result))

フォーマット出力

f文字列を使うと書式を指定して出力できる。{:8.3f} は全体8桁・小数点以下3桁を意味する。

print(f"x = {3.14159:8.3f}, y = {2.71828:8.3f}")

5. 制御構造

条件分岐(if文)

条件が真のとき if ブロックを実行し、偽のとき else ブロックを実行する。

if score >= 60:
    result = "合格"
else:
    result = "不合格"

多分岐(if-elif-else文)

3つ以上の経路に分岐する。条件は上から順に評価され、最初に真になった箇所だけが実行される。

if score >= 80:
    grade = "A"
elif score >= 60:
    grade = "B"
else:
    grade = "C"

while文

条件が真の間、処理を繰り返す。ループ変数(ここでは i)の更新を忘れると無限ループになるので注意する。

total = 0
i = 1
while i <= 10:
    total += i
    i += 1  # これを忘れると無限ループになる

for文

繰り返し回数が決まっている場合に使う。range(1, 11) は1から10までを表す(終端の11は含まれない)。繰り返し回数を管理する変数をループカウンタと呼ぶ。

total = 0
for i in range(1, 11):  # i は 1, 2, ..., 10 と変化する
    total += i

繰り返しの入れ子(多重ループ)

繰り返しの中に別の繰り返しを配置する。外側のループが1回進むたびに、内側のループが最初から最後まで実行される。2次元のデータ処理などに使う。

for i in range(1, 4):
    for j in range(1, 4):
        print(f"{i},{j} ", end="")

6. リスト

作成とアクセス

複数のデータを順番に並べたデータ構造である。インデックスで各要素にアクセスする。インデックスは0から始まる。

numbers = [0] * 5   # 0が5個のリスト(インデックスは0〜4)
numbers[0] = 10     # 先頭要素に代入
value = numbers[0]  # 先頭要素を参照

初期値を指定して作成

scores = [0] * 30
heights = [170.0, 165.5, 180.5]

サイズの取得

len() でリストの要素数を取得する。リストは動的にサイズを変更できる。

size = len(array)
print("リストサイズ:" + str(size))

多次元リスト

リストの中にリストを入れることで、表(行列)のような構造を作れる。matrix[行][列] でアクセスする。以下に3行3列のリストの例を示す。

matrix = [
    [0, 0, 0],
    [0, 0, 0],
    [0, 0, 0]
]
matrix[0][0] = 1  # 1行目・1列目に代入

全要素の処理

for文で要素を直接取り出して処理できる。

for element in array:
    print(element, end=" ")

境界チェック

インデックスが有効範囲(0以上・要素数未満)を外れると IndexError が発生する。アクセス前に範囲を確認する。

if 0 <= index < len(array):
    value = array[index]

要素の交換

一時変数なしで2要素を入れ替えられる。ソートアルゴリズムなどで使う。

array[i], array[j] = array[j], array[i]

7. 数学関数

math モジュールをインポートして使う。

import math
関数・演算説明
**べき乗2 ** 38
math.floor(x)床関数(小数点以下切り捨て)math.floor(3.7)3
math.sin(x)正弦(引数はラジアン)math.sin(30.0 * math.pi / 180.0)
math.cos(x)余弦(引数はラジアン)math.cos(math.pi / 3.0)
math.tan(x)正接(引数はラジアン)math.tan(math.pi / 4.0)
math.exp(x)指数関数(eのx乗)、戻り値は常に正math.exp(2.0)
math.log10(x)常用対数(底10)、引数は正の数math.log10(100.0)2.0

度数をラジアンに変換するには π/180 を掛ける。

import math
sin30 = math.sin(30.0 * math.pi / 180.0)

8. アルゴリズムと応用

素数判定

2以上の整数が素数かどうかを判定する。2から平方根までの整数で割り切れるかを調べる。割り切れれば素数ではない。平方根より大きい約数は必ず対になる小さい約数が存在するため、平方根までの確認で十分である。

# n は 2 以上の整数を前提とする
is_prime = True
for i in range(2, int(n ** 0.5) + 1):
    if n % i == 0:
        is_prime = False
        break

エラトステネスのふるい

指定範囲の素数をまとめて求めるアルゴリズムである。古代ギリシャの数学者エラトステネスが考案した。素数 i が見つかったらその倍数(i², i²+i, ...)を「素数でない」と記録していく。最後まで記録されなかった数が素数である。

is_not_prime = [False] * (n + 1)
i = 2
while i * i <= n:
    if not is_not_prime[i]:
        for j in range(i * i, n + 1, i):
            is_not_prime[j] = True
    i += 1
# is_not_prime[k] が False の k(2以上)が素数

ユークリッドの互除法

2つの整数の最大公約数を求めるアルゴリズムである。割り算の余りを使って計算を繰り返す。余りが0になったときの a が最大公約数である。

while b != 0:
    a, b = b, a % b
# 終了後、a が最大公約数

うるう年判定

グレゴリオ暦のうるう年を判定する。4で割り切れる年はうるう年。ただし100で割り切れる年は平年。ただし400で割り切れる年はうるう年である。

is_leap_year = (year % 4 == 0 and year % 100 != 0) or (year % 400 == 0)

複利計算

利息を元金に加算し、次の期間はその合計に対して利息を計算する方式である。元金 principal、年利 rate、期間 years から最終金額を求める。

amount = principal * (1.0 + rate) ** years

Horner法

多項式を効率的に計算するアルゴリズムである。3 + 2x + 5x²x=4 で計算する場合、((5×4)+2)×4+3 = 91 のように内側から順に展開することで乗算回数を減らせる。

# 3 + 2x + 5x^2 を x=4 で計算
a = [3, 2, 5]  # 定数項から順に係数を並べる
x = 4
result = a[2]               # 最高次の係数から始める
for i in range(1, -1, -1):  # i は 1, 0 の順に変化
    result = result * x + a[i]
print(result)  # 91

複素数の乗算

複素数の乗算を行う。実部と虚部を別々の変数で管理する。(a1 + a2i)(b1 + b2i) を計算する。

a1, a2 = 3, 2   # 1つ目の複素数(実部, 虚部)
b1, b2 = 1, 4   # 2つ目の複素数(実部, 虚部)
real = a1 * b1 - a2 * b2  # 積の実部
imag = a1 * b2 + a2 * b1  # 積の虚部

浮動小数点数の誤差

浮動小数点演算では誤差が蓄積される。0.1 を100回加算しても 10.0 にはならない。等値比較(==)ではなく、差が十分小さいかどうかで判定する必要がある。

total = 0.0
for i in range(100):
    total += 0.1
print(total)  # 9.999999999999998(10.0 にならない)

簡易棒グラフ

数値を * の個数で視覚的に表現し、簡易的なグラフを作成する。

value = 5
print("*" * value)  # *****

例外処理

実行時のエラーを検出して処理する。try-except 文でエラーを処理し、プログラムの安定性を高める。

try:
    x = int("abc")   # 数値に変換できないので ValueError が発生
except ValueError:
    print("数値形式エラー")

9. 外部ライブラリの活用

インストール(Windows)

コマンドプロンプトで以下を実行する。

pip install numpy matplotlib

インポート

モジュール全体をインポートする方法に加え、特定の関数だけをインポートすることもできる。as で別名を付けると記述を短くできる。

import math
from math import sqrt, pi
import numpy as np
import matplotlib.pyplot as plt

NumPy

NumPyは数値計算用の外部ライブラリである。多次元配列(ndarray)を使って大量のデータを効率よく処理できる。

配列の作成

zeros() は0の配列、ones() は1の配列を作成する。いずれも浮動小数点数の配列になる。

import numpy as np
a = np.array([1, 2, 3, 4, 5])  # リストから作成
b = np.zeros(5)                 # 0.0 が5個の配列
c = np.ones(3)                  # 1.0 が3個の配列

配列の演算(ブロードキャスト)

NumPy配列では演算子で全要素を一括計算できる。これをブロードキャストと呼ぶ。ループなしで配列全体を処理できる。

import numpy as np
a = np.array([1, 2, 3, 4, 5])
b = a * 2    # [2, 4, 6, 8, 10]
c = a + 10   # [11, 12, 13, 14, 15]
d = a ** 2   # [1, 4, 9, 16, 25]

数学関数

配列を渡すと全要素に関数が適用される。

import numpy as np
angles = np.array([0, 30, 60, 90])
radians = angles * np.pi / 180
sin_values = np.sin(radians)  # 各角度のサインをまとめて計算

Matplotlib

Matplotlibはデータ可視化用の外部ライブラリである。plot() などの関数でグラフを描画し、show() で画面に表示する。

折れ線グラフ

import matplotlib.pyplot as plt
x = [0, 1, 2, 3, 4]
y = [0, 1, 4, 9, 16]
plt.plot(x, y)
plt.show()

棒グラフ

bar() で棒グラフを描画する。第1引数に横軸の値、第2引数に棒の高さを指定する。

import matplotlib.pyplot as plt
labels = ["A", "B", "C", "D"]
values = [3, 7, 2, 5]
plt.bar(labels, values)
plt.show()

散布図

scatter() で散布図を描画する。2変数の関係を視覚的に確認できる。

import matplotlib.pyplot as plt
x = [1, 2, 3, 4, 5]
y = [2, 4, 1, 8, 7]
plt.scatter(x, y)
plt.show()

グラフの装飾

タイトル・軸ラベル・凡例を追加してグラフを読みやすくする。

import matplotlib.pyplot as plt
x = [0, 1, 2, 3, 4]
y = [0, 1, 4, 9, 16]
plt.plot(x, y, label="y = x^2")
plt.title("Square Function")
plt.xlabel("x")
plt.ylabel("y")
plt.legend()
plt.show()

主要な概念

統合開発環境

プログラムの作成・編集・実行から結果表示まで、開発に必要な機能を一つのソフトウェアにまとめた環境である。シンタックスハイライト・自動補完・自動インデント・デバッグ機能などの支援機能を備え、効率的なプログラム開発を実現する。Windsurf、Cursor、Visual Studio Code、Spyderなどが代表的である。

変数

変数はデータを保存する場所である。Pythonでは型宣言は不要で、値を代入すると変数が作られる。型は値に応じて決まる。整数は int、小数は float、文字列は str 型になる。

型(int・float・str・bool)

変数が持つデータの種類を型と呼ぶ。整数は int、小数は float、文字列は str 型である。比較演算子や論理演算子の結果は True または False を持つ bool 型になる。

演算子

演算子には四則演算・比較演算子・論理演算子がある。四則演算は加算(+)、減算(-)、乗算(*)、除算(/)を行う。整数除算(//)は結果を床関数で整数に変換した値を返す。比較演算子は2つの値を比較し、結果は True または False(bool型)になる。論理演算子は複数の条件を組み合わせる。and は両方が真のとき真になる。or はいずれかが真のとき真になる。not は真偽を反転する。

インデント

Pythonではインデントでブロックの範囲を示す。インデントは必須。通常はスペース4つを使う。インデントがないとエラーになる。

コメント

# から行末までがコメントになる。コメントは実行されない。コードの理解を助けるために使う。

制御構造

プログラムの処理の流れを制御する仕組みである。条件分岐(if文)は条件が真のとき if ブロックを実行し、偽のとき else ブロックを実行する。while文は条件が真の間、処理を繰り返す。for文は繰り返し回数が決まっている場合に使う。繰り返しの中に別の繰り返しを配置することを多重ループと呼ぶ。

ループカウンタ

繰り返し回数を管理する変数をループカウンタと呼ぶ。while文ではループカウンタの更新を忘れると無限ループになるので注意する。

リスト

複数のデータを順番に並べたデータ構造である。インデックスで各要素にアクセスする。インデックスは0から始まる。len() でリストの要素数を取得する。インデックスが有効範囲(0以上・要素数未満)を外れると IndexError が発生する。リストの中にリストを入れることで、表(行列)のような構造を作れる。

関数

特定の処理をまとめて名前を付けたものである。print() は画面にメッセージを表示して改行する。input() はキーボードからの入力を文字列として返す。len() はリストの要素数を返す。range() は繰り返しの範囲を指定する。終端の値は含まれない。

モジュールとインポート

モジュールは関連する関数などをまとめたファイルである。import 文でモジュールを読み込んで使う。モジュール全体をインポートする方法に加え、特定の関数だけをインポートすることもできる。as で別名を付けると記述を短くできる。

例外処理

実行時のエラーを検出して処理する仕組みである。try-except 文でエラーを処理し、プログラムの安定性を高める。try ブロック内でエラーが発生すると、対応する except ブロックが実行される。

浮動小数点数の誤差

浮動小数点演算では誤差が蓄積される。0.1 を100回加算しても 10.0 にはならない。等値比較(==)ではなく、差が十分小さいかで判定する必要がある。

アルゴリズム

問題を解くための手順を定めたものである。素数判定は2から平方根までの整数で割り切れるかを調べる(2以上の整数が対象)。エラトステネスのふるいは指定範囲の素数をまとめて求める。ユークリッドの互除法は2つの整数の最大公約数を求める。Horner法は多項式を効率的に計算する。

NumPy

NumPyは数値計算用の外部ライブラリである。多次元配列(ndarray)を使って大量のデータを効率よく処理できる。NumPy配列では演算子で全要素を一括計算できる。これをブロードキャストと呼ぶ。配列を渡すと全要素に数学関数が適用される。

Matplotlib

Matplotlibはデータ可視化用の外部ライブラリである。plot() などの関数でグラフを描画し、show() で画面に表示する。折れ線グラフ・棒グラフ・散布図を描画できる。タイトル・軸ラベル・凡例を追加してグラフを読みやすくできる。