Python基礎講座
完全マスター

HAGAKUREプログラミング塾 2025.07.27

🐍 講座の概要

最近本当に手でコード書いてないので、Pythonを忘れてしまわないように、
復習カリキュラムをAIに作ってもらいました。

Pythonの基礎から実践まで、6つの章に分けて
体系的に学習します。

手書きワークを交えながら、
実際にコードを書いて理解を深めていきましょう。

環境確認

画面共有は見えていますか?
音声ははっきりと聞こえていますか?
チャットはSlackの方でお願いします。

Special Thanks

佐賀県産業スマート化センターさまのコミュニティ支援にて、
ZOOMの有料プランを提供いただき、利用させていただいております。
https://www.saga-smart.jp/

今日のゴール

Pythonの基礎をしっかりと身につけて、
実際にAIと対話するプログラムを作成する

Python マスターへの第一歩!

第1章:文法の復習

ウォームアップ編

手書きワーク:
名前と年齢を変数にして、print()で紹介文を出力
辞書を使って「プロフィールカード」を手書き作成

第1章:サンプルコード

# 名前と年齢を変数に代入
name = "山田太郎"
age = 25

# 紹介文を出力
print(f"こんにちは!私の名前は{name}です。")
print(f"年齢は{age}歳です。")

# 辞書を使ったプロフィールカード
profile = {
    "名前": "山田太郎",
    "年齢": 25,
    "趣味": ["読書", "プログラミング", "旅行"],
    "好きな言語": "Python"
}

# プロフィールカードの表示
print("===== プロフィールカード =====")
for key, value in profile.items():
    print(f"{key}: {value}")

第2章:制御構文

if, for, while と演算

手書きワーク:
FizzBuzz(まず手で書く → 口頭で「何が出るか」確認)
簡単なメニュー表示と選択(条件分岐で処理)

第2章:サンプルコード

# FizzBuzzの実装
for i in range(1, 16):  # 1から15まで
    if i % 3 == 0 and i % 5 == 0:
        print("FizzBuzz")
    elif i % 3 == 0:
        print("Fizz")
    elif i % 5 == 0:
        print("Buzz")
    else:
        print(i)

# 簡単なメニュー表示と選択
print("\n===== メニュー =====")
print("1: 情報を表示")
print("2: 設定を変更")
print("3: 終了")

choice = input("選択してください(1-3): ")

if choice == "1":
    print("情報を表示します...")
elif choice == "2":
    print("設定を変更します...")
elif choice == "3":
    print("プログラムを終了します...")
else:
    print("無効な選択です。1-3の数字を入力してください。")

第3章:関数・スコープ

エラー処理

手書きワーク:
BMIを計算する関数(身長と体重を引数に)
「整数かどうか判定する関数」+ try-except

第3章:サンプルコード

# BMIを計算する関数
def calculate_bmi(height_cm, weight_kg):
    """
    BMIを計算する関数
    height_cm: 身長(cm)
    weight_kg: 体重(kg)
    """
    # cmをmに変換
    height_m = height_cm / 100
    # BMI = 体重(kg) / 身長(m)の2乗
    bmi = weight_kg / (height_m ** 2)
    return round(bmi, 1)  # 小数点第1位まで

# 関数を使ってBMIを計算
height = 170  # cm
weight = 65   # kg
bmi = calculate_bmi(height, weight)
print(f"身長{height}cm、体重{weight}kgの場合、BMIは{bmi}です")

# 整数かどうか判定する関数 + try-except
def is_integer(input_str):
    """
    文字列が整数に変換可能かどうかを判定する関数
    """
    try:
        int(input_str)
        return True
    except ValueError:
        return False

# 関数のテスト
test_values = ["42", "3.14", "abc", "-7"]
for value in test_values:
    if is_integer(value):
        print(f"'{value}'は整数です")
    else:
        print(f"'{value}'は整数ではありません")

第4章:リスト内包表記

組み込み関数

手書きワーク:
与えられた数リストを、2倍にしたリストに変換
2つのリスト(名前と得点)をzipでペアに

第4章:サンプルコード

# 与えられた数リストを2倍にする方法

# 元のリスト
numbers = [1, 2, 3, 4, 5]

# 方法1: リスト内包表記
doubled_numbers = [x * 2 for x in numbers]
print("リスト内包表記:", doubled_numbers)

# 方法2: map関数とlambda
doubled_map = list(map(lambda x: x * 2, numbers))
print("map関数:", doubled_map)

# 2つのリスト(名前と得点)をzipでペアにする
names = ["田中", "佐藤", "鈴木", "高橋", "伊藤"]
scores = [85, 92, 78, 96, 88]

# zip関数で2つのリストを結合
student_scores = list(zip(names, scores))
print("\n生徒の得点:")
for name, score in student_scores:
    print(f"{name}: {score}点")

# enumerate関数を使って順位付け
print("\n成績順:")
for rank, (name, score) in enumerate(sorted(student_scores, 
                                          key=lambda x: x[1], 
                                          reverse=True), 1):
    print(f"{rank}位: {name} ({score}点)")

第5章:クラス

オブジェクト指向の基本

手書きワーク:
Bookクラスを定義し、タイトル・著者を持たせる
introduce()メソッドで紹介文を出力

第5章:サンプルコード

# Bookクラスの定義
class Book:
    # 初期化メソッド
    def __init__(self, title, author, pages=0):
        self.title = title      # タイトル
        self.author = author    # 著者
        self.pages = pages      # ページ数
        self.is_open = False    # 本が開いているかどうか
    
    # 紹介メソッド
    def introduce(self):
        return f"『{self.title}』は{self.author}によって書かれた本です。全{self.pages}ページあります。"
    
    # 本を開くメソッド
    def open_book(self):
        self.is_open = True
        return f"『{self.title}』を開きました。"
    
    # 本を閉じるメソッド
    def close_book(self):
        self.is_open = False
        return f"『{self.title}』を閉じました。"

# Bookクラスのインスタンスを作成
python_book = Book("Python入門", "山田太郎", 300)
novel = Book("桜の森", "佐藤花子", 250)

# メソッドの呼び出し
print(python_book.introduce())
print(novel.introduce())

# 本を開いて閉じる
print(python_book.open_book())
print(python_book.close_book())

# 属性の変更
python_book.title = "Python完全マスター"
print(python_book.introduce())

第6章:OpenAI API

ミニチャットボット体験

🔌 APIとは?

Application Programming Interface

他のサービスやアプリケーションと通信するための「窓口」

📱 身近なAPIの例

  • 天気予報API - 現在の天気や予報を取得
  • 地図API - Google Maps、位置情報サービス
  • AI API - ChatGPT、画像認識、翻訳
  • SNS API - Twitter、Instagramの投稿
  • 決済API - PayPal、Stripe

💡 APIを使うメリット

  • 既存のサービスを再利用できる
  • 開発時間を短縮できる
  • 専門的な機能を簡単に利用できる
  • データの最新性を保てる

🌐 HTTPのリクエスト/レスポンス

Web通信の基本構造

📤 1. リクエスト(送信)

  • URL - どこに送るか(例:https://api.openai.com/v1/chat/completions)
  • メソッド - GET(取得)、POST(送信)、PUT(更新)、DELETE(削除)
  • ヘッダー - 認証情報、データ形式、ユーザーエージェントなど
  • ボディ - 送信するデータ(JSON形式が多い)

📥 2. レスポンス(受信)

  • ステータスコード - 200(成功)、404(見つからない)、500(サーバーエラー)
  • ヘッダー - データ形式、サイズ、キャッシュ設定など
  • ボディ - 返ってきたデータ(JSON、HTML、画像など)

🔄 通信の流れ

クライアント → リクエスト送信 → サーバー → レスポンス送信 → クライアント

OpenAI API サンプルコード

import requests

url = "https://api.openai.com/v1/chat/completions"
api_key = "sk-..."  # 各自のAPIキーに置き換え

headers = {
    "Content-Type": "application/json",
    "Authorization": f"Bearer {api_key}"
}

body = {
    "model": "gpt-4o-mini",
    "messages": [
        {"role": "system", "content": "あなたは親切なアシスタントです"},
        {"role": "user", "content": "こんにちは!"}
    ]
}

response = requests.post(url, headers=headers, json=body)
print(response.json()["choices"][0]["message"]["content"])

❓ Q & A

ご質問のある方は、お気軽にどうぞ!