デジタルこどもBASEのロゴ 特定非営利活動法人デジタルこどもBASE 📚 目次
第60回 Lv2 ⏱ 25〜35分

ミニ作品:パスワード自動生成器

🎯 きょうのミッション

Lv2のしめくくりです。パスワード自動生成器を作ります。文字・数字・記号のリストから乱数で選んで、毎回ちがう強いパスワードを作ります。リスト・乱数・関数・ループ、Lv2の総まとめ。

🧠 できるようになること

  • リスト・乱数・関数・ループを組み合わせられる
  • 実用的なツールを完成させる
  • Lv2学習の達成感を得る

🧰 用意するもの

  • パソコン
  • ブラウザ(Chrome / Edge / Safari)
  • インターネット接続
  • このページの「▶ このページで実行」ボタン(コードをそのまま動かせます)
  • Trinket(予備の実行サイト:https://trinket.io/python)

🖼 できあがり

パスワードの長さを聞いて、その長さの強いパスワードを自動生成。何個でも作れます。

📺 実行結果
何文字のパスワードを作る?: 12
生成されたパスワード:
K#3pX$9q!aB7
何文字のパスワードを作る?: 8
生成されたパスワード:
m4@Pz#1L
何文字のパスワードを作る?: 0
おわり!

🚀 やりかた

  1. アルファベット小文字・大文字・数字・記号のリストを作る。
  2. 全部を結合した chars リストを作る。
  3. def generate(length): で指定した長さのパスワード生成関数。
  4. ループの中で random.choice(chars) を length 回くりかえす。
  5. main で「文字数を聞く→生成→表示」をループ。0なら終了。

🐍 きょうのコード

Python main.py
import random

def generate(length):
    lower = list("abcdefghijklmnopqrstuvwxyz")
    upper = list("ABCDEFGHIJKLMNOPQRSTUVWXYZ")
    digits = list("0123456789")
    symbols = list("!@#$%^&*?")
    chars = lower + upper + digits + symbols

    password = ""
    for i in range(length):
        password += random.choice(chars)
    return password

def main():
    while True:
        length = int(input("何文字のパスワードを作る?: "))
        if length == 0:
            print("おわり!")
            break
        pw = generate(length)
        print(f"生成されたパスワード:\n{pw}")

main()
▶ Trinketを開いて動かす

このページの「▶ このページで実行」でそのまま動きます。Trinketを使うときは、上のコードをコピーして左のエリアに貼り付け、Runボタン(▶)を押します。

💡 きょうのポイント

Lv2で学んだすべての要素(リスト・くりかえし・乱数・関数・while)を使った実用作品。実際に使えるパスワード生成ツールが、こんなに短いコードで作れます。

🎮 チャレンジ

  • 「強さレベル(記号を含むかなど)」を選べるようにしよう
  • 1回で5つパスワードを生成して並べよう
  • random.sample で「同じ文字が2回出ないパスワード」も作ろう

🔁 ふりかえり

  • Lv2で学んだ機能の中で、一番役に立ったものは?
  • 実用的なツールを作るのは、楽しかった?
  • 次のLv3では turtle で絵やゲームを作ります。何が起きると思う?

👨‍👩‍👧 おうちの人・先生へ

  • 準備:なし。
  • つまずきポイント:list("abc") は ['a', 'b', 'c'] になる便利機能。
  • 声かけ例:「実際にこのパスワードを使ってもいい?」「セキュリティの観点でどうか?」を話し合うと、社会的にも学べる回。
  • 発展:secrets モジュールを使うとさらに安全。中級で扱います。