2日目のゴール
2日目のテーマは
「辞書型で“複数ユーザー”を扱い、メニューから操作できるようになること」 です。
1日目でやったのは「1人だけ登録してすぐ表示」でした。
今日はそこから一歩進んで、
複数ユーザーを辞書で管理する
メニューで「登録」「一覧表示」を選べるようにする
CRUD のうち C(Create)と R(Read)を“アプリの形”にする
ここを狙います。
辞書で「複数ユーザー」を扱う復習
users 辞書の構造をもう一度言葉で確認する
2日目のスタート地点として、
まずはこの形を頭に思い浮かべてください。
users = {
"u001": {
"id": "u001",
"name": "Taro",
"age": 25,
"email": "taro@example.com"
},
"u002": {
"id": "u002",
"name": "Hanako",
"age": 30,
"email": "hanako@example.com"
}
}
Pythonこれを日本語で説明すると、
users は「ユーザー一覧」を表す大きな辞書
キーはユーザーID(”u001″ など)
値は「そのユーザーの情報が入った辞書」
という二段構造です。
ここで大事なのは、
「ユーザーIDで一発でユーザーを取り出せる」
という設計になっていることです。
Create を関数として切り出す
「ユーザーを1人登録する処理」に名前をつける
1日目は main の中に全部書いていましたが、
2日目では「役割ごとに関数に分ける」ことを意識します。
まずは「ユーザーを1人登録する」関数です。
def add_user(users):
print("=== ユーザー登録 ===")
user_id = input("ユーザーID: ").strip()
if user_id in users:
print("そのIDはすでに使われています。")
return
name = input("名前: ").strip()
age_text = input("年齢: ").strip()
email = input("メールアドレス: ").strip()
if not age_text.isdigit():
print("年齢は数字で入力してください。登録を中止します。")
return
age = int(age_text)
user = {
"id": user_id,
"name": name,
"age": age,
"email": email
}
users[user_id] = user
print("ユーザーを登録しました。")
Pythonここで深掘りしたいポイントは、いくつかあります。
ユーザーIDがすでに存在しないかを最初にチェックしている
年齢が数字かどうかを isdigit() で確認している
users は「ユーザー一覧の辞書」で、そこに users[user_id] = user で追加している
つまり、
「Create=辞書に新しいキーと値を追加する処理」
を、関数として名前付きで切り出した形です。
Read を「一覧表示」として形にする
全ユーザーをぐるっと回して表示する
次に、「登録されているユーザーを一覧表示する」関数を作ります。
def show_all_users(users):
print("=== ユーザー一覧 ===")
if not users:
print("ユーザーはまだ登録されていません。")
return
for user_id, user in users.items():
print(f"- ID: {user_id}")
print(f" 名前: {user['name']}")
print(f" 年齢: {user['age']}")
print(f" メール: {user['email']}")
print("----------")
Pythonここでの重要ポイントは、
for user_id, user in users.items(): で
「キー(ユーザーID)と値(ユーザー辞書)」を同時に取り出している
ということです。
users.items() は、
「(キー, 値) のペア」を順番に返してくれる仕組みです。
これで、
ユーザーIDを表示しつつ
そのユーザーの中身(name, age, email)も表示する
という「一覧表示」が簡単に書けます。
メニューで操作を選べるようにする
main で「アプリの流れ」を作る
ここまで作った関数を、
メニューから呼び出せるようにします。
def show_menu():
print("==========")
print("ユーザー管理アプリ(2日目)")
print("1: ユーザーを登録する")
print("2: ユーザー一覧を表示する")
print("0: 終了")
print("==========")
def main():
users = {}
while True:
show_menu()
choice = input("番号を選んでください: ").strip()
if choice == "1":
add_user(users)
elif choice == "2":
show_all_users(users)
elif choice == "0":
print("アプリを終了します。")
break
else:
print("不正な入力です。0, 1, 2 のどれかを選んでください。")
main()
Pythonここでの深掘りポイントは、
users 辞書を main の中で一度だけ作っている
add_user と show_all_users に users を渡している
while True で「メニューを繰り返し表示する」ループを作っている
という構造です。
つまり、
main は「アプリ全体の流れ」を担当し、
add_user は「登録」、show_all_users は「一覧表示」を担当する、
という役割分担になっています。
2日目の完成コードをまとめて見る
「複数ユーザー+メニュー」の最初の形
ここまでのコードを、ひとつにまとめます。
def add_user(users):
print("=== ユーザー登録 ===")
user_id = input("ユーザーID: ").strip()
if user_id in users:
print("そのIDはすでに使われています。")
return
name = input("名前: ").strip()
age_text = input("年齢: ").strip()
email = input("メールアドレス: ").strip()
if not age_text.isdigit():
print("年齢は数字で入力してください。登録を中止します。")
return
age = int(age_text)
user = {
"id": user_id,
"name": name,
"age": age,
"email": email
}
users[user_id] = user
print("ユーザーを登録しました。")
def show_all_users(users):
print("=== ユーザー一覧 ===")
if not users:
print("ユーザーはまだ登録されていません。")
return
for user_id, user in users.items():
print(f"- ID: {user_id}")
print(f" 名前: {user['name']}")
print(f" 年齢: {user['age']}")
print(f" メール: {user['email']}")
print("----------")
def show_menu():
print("==========")
print("ユーザー管理アプリ(2日目)")
print("1: ユーザーを登録する")
print("2: ユーザー一覧を表示する")
print("0: 終了")
print("==========")
def main():
users = {}
while True:
show_menu()
choice = input("番号を選んでください: ").strip()
if choice == "1":
add_user(users)
elif choice == "2":
show_all_users(users)
elif choice == "0":
print("アプリを終了します。")
break
else:
print("不正な入力です。0, 1, 2 のどれかを選んでください。")
main()
Python関数ごとの役割を日本語で言い切る
自分の言葉で説明できたら、もう“理解した側”
add_user
「ユーザーID・名前・年齢・メールを入力してもらい、
ユーザー辞書を作って users 辞書に登録する。
ID の重複や年齢の入力ミスもチェックする。」
show_all_users
「users 辞書の中身をぐるっと回して、
ユーザーIDとそのユーザー情報を一覧表示する。」
show_menu
「アプリのメニュー(登録・一覧・終了)を表示する。」
main
「users 辞書を用意し、メニューを繰り返し表示しながら、
選ばれた番号に応じて add_user や show_all_users を呼び出す。」
ここまで自分の言葉で説明できれば、
「辞書型で作るユーザー管理アプリの“骨格”」
はもうつかめています。
2日目のまとめ:今日つかんでほしい感覚
今日の本質は、これです。
ユーザー一覧は「ユーザーID → ユーザー辞書」の辞書で持つ。
Create は「users[user_id] = user」で新しいユーザーを追加すること。
Read(一覧)は「for user_id, user in users.items():」で全部回して表示すること。
メニューと while ループを使うと、「アプリとしての流れ」が生まれる。
辞書(データ)と関数(操作)を分けて考えると、コードの見通しが一気によくなる。
3日目からは、
この土台の上に「Update(更新)」と「Delete(削除)」を乗せていきます。
いよいよ CRUD の “UD” に踏み込んでいくので、
今日の「複数ユーザー+メニュー」の感覚はしっかり握っておいてください。


