HAGAKUREプログラミング塾 2025.07.27
最近本当に手でコード書いてないので、Pythonを忘れてしまわないように、
復習カリキュラムをAIに作ってもらいました。
Pythonの基礎から実践まで、6つの章に分けて
体系的に学習します。
手書きワークを交えながら、
実際にコードを書いて理解を深めていきましょう。
画面共有は見えていますか?
音声ははっきりと聞こえていますか?
チャットはSlackの方でお願いします。
佐賀県産業スマート化センターさまのコミュニティ支援にて、
ZOOMの有料プランを提供いただき、利用させていただいております。
https://www.saga-smart.jp/
Pythonの基礎をしっかりと身につけて、
実際にAIと対話するプログラムを作成する
Python マスターへの第一歩!
ウォームアップ編
手書きワーク:
名前と年齢を変数にして、print()で紹介文を出力
辞書を使って「プロフィールカード」を手書き作成
# 名前と年齢を変数に代入
name = "山田太郎"
age = 25
# 紹介文を出力
print(f"こんにちは!私の名前は{name}です。")
print(f"年齢は{age}歳です。")
# 辞書を使ったプロフィールカード
profile = {
"名前": "山田太郎",
"年齢": 25,
"趣味": ["読書", "プログラミング", "旅行"],
"好きな言語": "Python"
}
# プロフィールカードの表示
print("===== プロフィールカード =====")
for key, value in profile.items():
print(f"{key}: {value}")
if, for, while と演算
手書きワーク:
FizzBuzz(まず手で書く → 口頭で「何が出るか」確認)
簡単なメニュー表示と選択(条件分岐で処理)
# 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の数字を入力してください。")
エラー処理
手書きワーク:
BMIを計算する関数(身長と体重を引数に)
「整数かどうか判定する関数」+ try-except
# 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}'は整数ではありません")
組み込み関数
手書きワーク:
与えられた数リストを、2倍にしたリストに変換
2つのリスト(名前と得点)をzipでペアに
# 与えられた数リストを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}点)")
オブジェクト指向の基本
手書きワーク:
Bookクラスを定義し、タイトル・著者を持たせる
introduce()メソッドで紹介文を出力
# 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())
ミニチャットボット体験
他のサービスやアプリケーションと通信するための「窓口」
クライアント → リクエスト送信 → サーバー → レスポンス送信 → クライアント
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"])
ご質問のある方は、お気軽にどうぞ!