練習用のパスワード生成関数を作成していますが、3つあるかどうかをチェックしたいときに生成するパスワードにユーザーが少なくとも8記号の長さを指定しているかどうかを確認しています間違った入力試行returnを使ってプログラムを終了するだけです。パスワードジェネレータ関数の奇数 '戻り値'
私はリターン関数がすべてをストップすることを期待していましたが、その後のループを続行しませんでしたが、そうではありませんでした。
なぜそれが起こっているのか理解してもらえますか?
import string
import random
attempts = 0
def PasswordGenerator(passwordlenght):
passwordlenght = int(passwordlenght)
password= ""
i = 0
if passwordlenght < 8:
print("Password length must be more than 8 symbols !!!")
global attempts
attempts += 1
if attempts <3:
PasswordGenerator(passwordlenght)
else:
return 1
while i < passwordlenght:
if i in range(1,passwordlenght,3):
password += string.ascii_lowercase[random.randrange(len(string.ascii_lowercase))]
elif i in range(2, passwordlenght, 3):
password += string.ascii_uppercase[random.randrange(len(string.ascii_uppercase))]
elif i in range(3, passwordlenght, 3):
password += string.digits[random.randrange(len(string.digits))]
i += 1
print(password)
PasswordGenerator(5)
質問にコードを入力するときにインデントのいくつかがうんざりしているように見えます。それが問題に影響する可能性があります。質問内のすべての行に実際のスクリプトと同じインデントが付いていることを確認してください。 –
問題が字下げでない場合は、通常の繰り返し構造の代わりに再帰を使用することに関係していると思います。 –
'PasswordGenerator'関数の中から' PasswordGenerator'を呼び出すべきではありません。これは再帰と呼ばれ、この動作を見ている理由です。あなたは内側の呼び出しから戻り、外側の呼び出しを続行します。再帰を 'goto'として使うのではなく、ループを使うようにコードを再編集してください。 – Blorgbeard