こんにちは、Python初心者のハナマルコです!
皆さんパスワード管理どうしてますか?
パスワードアプリ使ってるよ!紙にメモしてる。全部同じパスワードにしてる(ソレ危険です)
そもそもパスワードを考えるのが面倒ですよね。
今回は「パスワード生成プログラム」にチャレンジしてみました。最初はまったくのゼロ知識で、正直なところ「プログラムでパスワードってどうやって作るの?そんなの無理じゃない?」と思っていました。
でも、チャッピー先生に聞きながらステップを踏んでいくうちに、なんと!
- ランダムな文字列の生成
- 文字と数字の組み合わせ
- 自由に長さを指定して生成
という機能をもつパスワードジェネレーターが完成したのです!
その過程を、同じような初心者の方に向けてご紹介します。
でも途中でエラーが出て焦ったこともありました…汗
その時のやり取りも含めて、どうやって解決したのかも振り返ってみます。
ステップ1:まずは「適当な文字列」を作ってみよう!

Pythonでパスワードを考えてくれるランダムな文字列を出力するコードが知りたいです!



了解しました。ランダムな文字列を出力するコードはこちらです
import random
import string
# ランダムな8文字の文字列を生成
password = ”.join(random.choices(string.ascii_letters, k=8))
print(“生成されたパスワード:”, password)
実行結果
生成されたパスワード: uHQjSezt



わーすごい、なんかパスワードっぽい!実行するたびに違うパスワードができるよ
コードの解説
初心者にわかりやすく解説します。
import random
今回の場合は複数の文字からランダムに何個か選ぶimport string
英語の文字や記号などのセットを使うpassword = ''.join(random.choices(string.ascii_letters, k=8))
ランダムに選ばれた8個のアルファベットをくっつけて、1つの文字列にしています。password
という名前の変数に入れています。(名前は自由に変更可能)print("生成されたパスワード:", password)
生成したパスワードを画面に表示する
もっと複雑なコードなのかなと思ってたけど、案外簡単なコードで驚きです。
random
モジュールでランダムに文字を選ぶ
string
モジュールでアルファベットを使えるようにする
join()
でバラバラの文字を1つのパスワードにまとめる
print()
で結果を表示するメージで覚えよう
イメージとしては
random
は サイコロやくじ引きが入った箱string
は アルファベットや数字がぎっしり詰まった棚
それを「import(取り出す)」することで、コードの中で使えるようになります。
ステップ2:文字+数字のパスワードにしたい!



文字だけじゃなくて数字も入れたい!Pythonならできるよね?



はい、もちろんできます
import random
import string
# 英字と数字を含む文字列を生成
characters = string.ascii_letters + string.digits
password = ”.join(random.choices(characters, k=8))
print(“生成されたパスワード:”, password)
実行結果
生成されたパスワード: R9t3aZ1q



いいね、ちゃんと数字が入ってる
コードの解説
characters = string.ascii_letters + string.digits
英字(アルファベット)と数字を1つにまとめたセットを作る
string.ascii_letters
これは英字(A〜Z と a〜z)が全部入っているセットです。
中身はこんな感じ:「abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ」
- 小文字 a〜z
- 大文字 A〜Z
が全部そろっています!
string.digits
これは数字(0〜9)のセットです。
中身はこんな感じ:「0123456789」
+
で足す。
文字列どうしをくっつける(連結する)という意味です。
つまりcharacters
の中身は、「abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789」となります。
ステップ3:長さを指定できるようにしたい!
サイトやサービスでパスワード登録するときに、〇文字以上に設定してくださいってありますよね。
せっかくならパスワードを設定するときに、英数字(大文字・小文字)を含む自由に長さを決められるようにしたいですね。



パスワードの長さを指定できるようにコードを考えてください



はい、わかりました
import random
import string
length = input(“パスワードの長さを入力してください: “)
characters = string.ascii_letters + string.digits
password = ”.join(random.choices(characters, k=length))
print(“生成されたパスワード:”, password)
「なるほど、input()
で長さを聞いて、それを使うんだな」と思って、そのまま実行してみたのですが……
謎のエラー発生!


えっ……?なにこれ?パニックです・・・私なにかした?



チャッピー先生、助けて~!



はい、わかりました
TypeError: 'str' object cannot be interpreted as an integer
エラーメッセージについて解説します。
input()
で入力した数字は「数字っぽく見えても実は文字」なんです。
たとえば、5桁のパスワードを作るつもりで5と入力したのですが、実は"5"
という文字列になっていて、それをそのまま k=length
に使うと Python が「えっ?これ文字じゃん!」と困ってしまうのです。
input()
で数字を入力しても、Pythonは文字として受け取ります。
でも、random.choices()
では本物の数字(整数)が必要です。
解決方法
int()
を使って、文字を数字に変えてあげればOKです!
修正したコードがこちらです。
import random
import string
length = int(input(“パスワードの長さを入力してください: “))
characters = string.ascii_letters + string.digits
password = ”.join(random.choices(characters, k=length))
print(“生成されたパスワード:”, password)
実行結果
パスワードの長さを入力してください: 5
生成されたパスワード: 07eR2
パスワードの長さを入力してください: 25
生成されたパスワード: HY5nzRKO5buYTpLY4C5kghknc
ちゃんと指定した長さで自動でパスワードを作ってくれました。ちょっと感動しました!
なぜChatGPTは間違ったコードを教えたのか?
- 質問があいまいだった
「何文字のパスワードか」を明確に伝えなかったため、ChatGPTが想定で補ってしまった。 - 初心者向けの補足が抜けていた
input()
が文字列(str)になることと、int()
で数字に変える必要があることを説明し忘れていた。 - コードの一部だけを参考にしてしまった
よくあるサンプルコードの一部をそのまま使ってしまい、細かい部分が抜けていた。 - 完璧ではないAIだから
ChatGPTはとても賢いけれど、たまにミスをすることもある。
だから「おかしいな?」と思ったら確認することが大事!
まとめ
パスワードを自動で作るなんて難しそう…と思ってたけど、ChatGPTに聞いてみたら意外とできちゃいました!
途中でエラーが出て焦ったけど、それも含めて楽しい経験でした!
今回の学びポイント
random
モジュールでランダムな動きができるstring
モジュールには便利な文字セットがたくさんinput()
でユーザーに入力してもらえる- エラーが出ても、落ち着いて原因を探せばOK!
「わからなくても、聞けばいいんだ」って気持ちで気軽にトライしてみてください。
最後まで読んでいただき、ありがとうございました!