Pythonで簡単なパスワード生成アプリを作ってみよう

python

今回はPythonを使ってランダムパスワードを生成するアプリを作ってみよう!

実行例

実行例1

パスワードの文字数を入力してください>>8
大文字を使いますか?(y/n)>>y
数字を使いますか?(y/n)>>y
記号を使いますか?(y/n)>>y
生成されたパスワード: jU@cIHy7

実行例2

パスワードの文字数を入力してください>>4
大文字を使いますか?(y/n)>>y
数字を使いますか?(y/n)>>y
記号を使いますか?(y/n)>>y
生成されたパスワード: pX2p

仕様

  • パスワードの文字数を入力できる
  • 小文字のアルファベットは最初から使用する
  • 大文字を使えるかどうか選べる
  • 数字を使えるかどうか選べる
  • 記号を使えるかどうか選べる,今回使用できる記号は以下
!@#$%^&*()
  • 候補文字の中からランダムに1文字ずつ選んでパスワードを生成する
  • 同じ文字が重複する場合がある
  • 大文字・数字・記号を y にした場合でも、それらは候補文字に追加されるだけであり、生成されたパスワードに必ず含まれるわけではない。

レッツチャレンジ!

腕に覚えのある人は自力で作成してみよう!

作成例

  • 以下のように作成する
import random

chars = "abcdefghijklmnopqrstuvwxyz"

uppercase = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
digits = "0123456789"
symbols = "!@#$%^&*()"

length = int(input("パスワードの文字数を入力してください>>"))

use_upper = input("大文字を使いますか?(y/n)>>")
use_digit = input("数字を使いますか?(y/n)>>")
use_symbol = input("記号を使いますか?(y/n)>>")

if use_upper == "y":
    chars += uppercase
if use_digit == "y":
    chars += digits
if use_symbol == "y":
    chars += symbols

password = ""

for _ in range(length):
    password += random.choice(chars)

print("生成されたパスワード:", password)

解説

このアプリの仕組み

このプログラムは、まずパスワードに使う文字の候補を用意し、その中からランダムに文字を選んでパスワードを作る仕組みである。

最初に小文字のアルファベットを基本の文字列として用意しておき、必要に応じて大文字・数字・記号を追加していく。
その後、指定された文字数ぶんだけランダムに1文字ずつ取り出し、最後に連結して1つのパスワードとして表示する。

構造としては非常にシンプルでありながら、Pythonの基礎がしっかり詰まっている。

1. randomモジュールを読み込む

import random

Pythonでランダムな処理を行うには、random モジュールを使う。
今回はこの中の random.choice() を使い、文字列の中からランダムに1文字を取り出す。

パスワード生成では「候補の中からランダムに選ぶ」という処理が中心になるため、最初にこのモジュールを読み込んでおく必要がある。

2. 使用する文字をあらかじめ用意する

chars = "abcdefghijklmnopqrstuvwxyz"

uppercase = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
digits = "0123456789"
symbols = "!@#$%^&*()"

ここでは、パスワードに使う文字を文字列として定義している。

chars には最初から小文字のアルファベットを入れている。
つまり、このアプリでは小文字は標準で使用する仕様になっている。

そのうえで、オプションとして

  • 大文字を追加するための uppercase
  • 数字を追加するための digits
  • 記号を追加するための symbols

を別々に用意している。

このように分けておくことで、ユーザーの入力に応じて必要なものだけを追加できるようになる。

3. パスワードの文字数を入力する

length = int(input("パスワードの文字数を入力してください>>"))

input() を使うと、キーボードから入力を受け取ることができる。
ただし、input() が返す値は文字列である。今回は「何文字のパスワードを作るか」という数値が必要なので、int() を使って整数に変換している。たとえばユーザーが 12 と入力すると、文字列 "12" ではなく、整数の 12 として扱えるようになる。

4. 大文字・数字・記号を使うかどうかを入力する

use_upper = input("大文字を使いますか?(y/n)>>")
use_digit = input("数字を使いますか?(y/n)>>")
use_symbol = input("記号を使いますか?(y/n)>>")

ここでは、追加する文字の種類をユーザーに選ばせている。
入力はシンプルに y または n としている。

たとえば、

  • y なら使用する
  • n なら使用しない

という意味になる。このように入力を受け取り、その内容によって処理を変えるのが条件分岐の基本である。

5. 選ばれた文字をcharsに追加する

if use_upper == "y":
    chars += uppercase
if use_digit == "y":
    chars += digits
if use_symbol == "y":
    chars += symbols

ここがこのプログラムの中心部分である。if 文を使って、ユーザーが y を入力した場合だけ文字を追加している。
chars += uppercase は、もともとの chars に大文字の文字列を後ろからつなげる処理である。

たとえば大文字と数字を使う場合、chars の中身は最終的に次のようなイメージになる。

chars="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"

6. 空のパスワードを用意する

password = ""

ここでは、生成結果を入れるための空の文字列を作っている。
最初は何も入っていないが、このあとループの中でランダムに選んだ文字を少しずつ追加していく。
完成したときには、この password に生成された文字列が入ることになる。

7. 指定した文字数ぶんだけランダムに文字を追加する

for _ in range(length):
    password += random.choice(chars)

ここでは for 文を使って、指定された文字数ぶんだけ繰り返し処理を行っている。
range(length) は、length 回だけ繰り返すための書き方である。
たとえば length が 12 なら、このループは12回実行される。

random.choice(chars) は、chars の中からランダムに1文字を取り出す。
その1文字を password += ... で後ろに追加していくことで、少しずつパスワードが完成していく。
ここで使っている _ は、繰り返し回数だけ必要で、変数自体は使わないことを表している。
for i in range(length): でも動くが、今回は i の値を使わないため _ のほうが自然である。

8. 生成されたパスワードを表示する

print("生成されたパスワード:", password)

最後に print() を使って、完成したパスワードを画面に表示する。
ここまでの流れによって、ユーザーが指定した条件に応じたランダムなパスワードが生成される。

さいごに

短いコードの中にプログラミングのエッセンスがぎゅっと詰まっている、今回Pythonでコーディングしているのでとてもシンプルになっている点もポイントだ。

同じお題を他の言語でやってみるものよい練習になる

python
スポンサーリンク
シェアする
mjpurinをフォローする

コメント

タイトルとURLをコピーしました