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"])
ご質問のある方は、お気軽にどうぞ!