質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

パスワード

パスワードは主に情報にアクセスする際に扱われます。主に、アクセス可能なユーザーを限定する手段として使われます。

Q&A

解決済

2回答

221閲覧

【Python3系】初心者です パスワードジェネレーターで52桁以上を指定するとエラーが出る

Hayao819

総合スコア34

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

パスワード

パスワードは主に情報にアクセスする際に扱われます。主に、アクセス可能なユーザーを限定する手段として使われます。

0グッド

0クリップ

投稿2018/06/07 13:38

編集2018/06/07 13:43

Pythonでのパスワードジェネレーターについて

Python初心者です。 練習のためにパスワードジェネレーターを作っていました。
しかし、パスワードの桁数を53桁以上にするとエラーが発生してしまいます
解決方法を教えてください
よろしくお願いします

エラー内容

パスワード生成を行います 桁数を入力してください: 53 Traceback (most recent call last): File "C:\User\hayao\password.py", line 13, in <module> password = password + moji[random.randint(1,len(moji)) ] IndexError: list index out of range

該当のソースコード(Python 3系)

Python

1print ("パスワード生成を行います") 2 3import random 4ketasuu = 0 5ketasuu_kari = 0 6moji = ['1','2','3','4','5','6','7','8','9','0','a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z','A','B','C','D','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'] 7 8ketasuu_kari = input("桁数を入力してください: ") 9ketasuu = int(ketasuu_kari) - 1 10 11if ( ketasuu < 8 ) : 12 print ( str(ketasuu_kari) + "桁では短いため使用しないことをおすすめします") 13 14ransuu = random.randint(1,len(moji)) 15password = moji[int(ketasuu)] 16for i in range(int(ketasuu)) : 17 password = password + moji[random.randint(1,len(moji)) ] 18 19print (password)

試したこと

ググったところ「配列に存在しないインデックス番号が指定されている」とのことだったので len(moji) を 使用してみたのですが変わりませんでした

補足情報(FW/ツールのバージョンなど)

Windows 10 Pro 1803
Python 3.6.5
Visual Basic Code にて作成

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

mojiの個数が61個です。本来は10+26+26で62では。
大文字の'E'が抜けてます。

投稿2018/06/07 14:02

ikapy

総合スコア1167

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Hayao819

2018/06/07 14:06

Eが抜けていることに気づきっませんでした 回答ありがとうございました
guest

0

ベストアンサー

リストの添え字は0から始まります。
ですので、次のように書くのが正しいです。

Python

1password = password + moji[random.randint(0, len(moji)-1) ]

パスワードの桁数を53桁以上にするとエラーが発生してしまいます

たとえ1桁でも、運が悪ければ同様のエラーが出るはずです。

なお

random.randrangeを使うとインデックスの取得がもうちょっと簡潔に書けます。

Python

1password = password + moji[random.randrange(len(moji)) ]

目的を考えればrandom.choicesの方がさらに適切です。

Python

1password = ''.join(random.choices(moji, k=ketasuu))

投稿2018/06/07 13:52

編集2018/06/07 13:58
LouiS0616

総合スコア35660

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Hayao819

2018/06/07 14:07

ありがとうございました エラー解決しました できれば、乱数部分の違いについて教えてほしいです よろしくお願いします
LouiS0616

2018/06/07 14:11

randintは二つの引数 a, b を取り、 a以上b以下の整数をランダムに返します。 randrangeは二つの引数 a, b を取り、a以上b未満の整数をランダムに返します。 randrangeに引数を一つだけ渡すと、0以上引数未満の整数をランダムに返します。
LouiS0616

2018/06/07 14:13

choicesはちょっとアプローチが違い、引数のリストなどから任意の個数の要素をランダムに選びます。 このとき、選ばれた要素が重複する場合もあります。 ''.join(random.choices(moji, k=ketasuu)) 実際に返されたリストを、文字列のjoinメソッドを用いて連結しています。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問