Python初心者が、ChatGPTと一緒にパスワード作ってみた(実践4日目)

Pythonでパスワードを作る

こんにちは、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()で長さを聞いて、それを使うんだな」と思って、そのまま実行してみたのですが……

謎のエラー発生!

Google Colab実行エラー
Google Colab実行エラー

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

ハナマルコ

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

チャッピー先生

はい、わかりました

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!

「わからなくても、聞けばいいんだ」って気持ちで気軽にトライしてみてください。

次回予告
if文を実践で学ぶ!Pythonとじゃんけんしてみた

最後まで読んでいただき、ありがとうございました!

当ブログは基本的にリンクフリーです。リンクを行う場合の許可や連絡は不要です。

Pythonでパスワードを作る

この記事が気に入ったら
いいね または フォローしてね!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
読みたいところに飛べる目次