UdemyでPythonを勉強した結果を残すブログ。

40歳でプログラミング始めて転職までいけるのかを実録してみます。

DAY5 for文を理解してパスワードジェネレーターを作る

5日目だけどforとリストの扱い方が理解できずに数日かかる。

 

パスワードジェネレーターの動作として、

・いくつ文字を入れるか?

・いくつ記号をいれるか?

・いくつ数字をいれるか?

 

を選べて、そこからランダムにパスワードを作る。

上記の答えを5,4,2とするならば

wobig$&$%99

みたいな感じ。

 

これを作るには入力した数字分を繰り返してそれぞれの文字をランダムに追加してあげなくてはいけない。

 

そのために今回はforを使う。

 

for 数字 in 変数 などで使える。例えばテストの点数の平均を測る時

test = [80, 60, 70, 55]とした場合

まずテストの合計を計算すると、

 

total_tensuu = 0  #合計点数という箱を用意する

for tensuu in test: #点数の中身を1つずつtensuuという箱にいれる

    total_tensuu += tensuu #合計点数の箱に80 + 60 + 70 + 55 を入れる

print(total_tensuu) #265が出力される

 

となる。

今度はこの265の平均を出すので、今回の科目数で割ると、同じように

total_kyouka = 0 #全教科の箱を用意する

for kyouka in test:

    total_kyouka += 1 #リストにあるデータ分1を足す

print(total_kyouka)

heikin = total_tensuu / total_kyouka)

print(heikin)

で平均が出力されます。

 

forを使わないでsum()とlen()の方が簡単だけど、forの使い方を勉強するためにこの方法にしています。

 

inの後ろがリストの場合はこれでいいのだけど、

数字の場合はrange(数字や数字の変数など)を使う。

 

パスワード ジェネレーターを作成するときの数字はいくついれる?のinputは数字なので、

letters = input("文字はいくついれる?")

5として

for letter in range(letters):

とかくことで、今回は5回処理をくり返すことができる。

この表記だと0から4で5回なのだけど、表現したい時で1から始めたい時などあるかもしれない。

 

その場合はrange(1,numbers)とはじめと最後+1の数字を入れることで範囲を指定できる。

 

それで初めてみると、

import random #ランダム関数をインポート

alphabet = ["a","b"~ "z"]

letterpass = []

のアルファベット全部とパスワードを入れるリストを用意してから

for letter in range(letters) #5回繰り返す

    letterpass += random.choice("alphabet") #.choice関数でアルファベットリストのどれかをランダムで選択

#この時点で出力されるものは[ "K","D","a","o","E"]とリスト状

print(''.join(letterpass)) 

#join関数を使うとリストが1つの文字列となって出力されます。

#KDaoEという感じで

 

 

同じように数字・記号とやっていくと、ジェネレーターの完成!

 

なんか急に難しくなった感があるなあ。。。

 

これで文字だけのパスワードリストが出力されます。