0

したがって (おそらく私のコードからわかるように)、私は Python (バージョン 3.8.3) の初心者であり、これまでのところ非常に楽しんでおり、いくつかの異なる初心者プロジェクトに挑戦してきました。私は現在、ランダム文字列ジェネレーターを作成しています(つまり、パスワードジェネレーター、したがってシークレットモジュールを使用しています)。

# Password Generator
import secrets, string

print("Welcome to the generator. Please specify your requirements")
print("A. All Characters;\nB. No Numbers;\nC. No Punctuation\nPlease choose the appropriate letter for your needs.")
userInput = input()
def userWelcome():

  if userInput.lower() == "a":
      generatePass = string.ascii_letters + string.digits + string.punctuation
      print("How long do you want your string to be?")
      stringRange = int(input())
      print( "".join(secrets.choice(generatePass) for _ in range(stringRange)) )


  elif userInput.lower() == "b":
      generatePass = string.ascii_letters + string.punctuation
      print("How long do you want your string to be?")
      stringRange = int(input())
      print("".join(secrets.choice(generatePass) for _ in range(stringRange)))


  elif userInput.lower() == "c":
      generatePass = string.ascii_letters + string.digits
      print("How long do you want your string to be?")
      stringRange = int(input())
      print("".join(secrets.choice(generatePass) for _ in range(stringRange)))


  else:
      print("Not an option! Let's try again.")
      userWelcome()

userWelcome()

ただし、私の問題は、ユーザーが間違ったオプションを入力した場合の対処方法です。ご覧のとおり、else ステートメントでは、入力した内容が以前のオプションのいずれにも一致しないと想定しているため、ジェネレーターを再度実行してみます (else ステートメントで userWelcome を再度呼び出します)。

ただし、たとえば 12 を入力として入力すると、シェルは文字列を出力し始めます (オプションではありません もう一度試してみましょう) 文字通り、ループに陥ったように千回出力します。私は正確に何が間違っているのか疑問に思っています。

私が試したこと:

(1) だから私は最初にtry と exceptでこの入力の問題を解決しようとしました。

(2)入力の整数をチェックするelif ステートメントを作成しようとしましたが、これもループに陥ります。コード:

elif userInput.isalpha() == False:
    print("Not an option! Let's try again.")
    userWelcome()

とにかく、それがうまく説明されることを願っています。私はこれで数時間忙しかったので、これを聞いてみようと思いました. たぶんそれは非常にばかげた質問かもしれませんが、私にとっては難しいです:)

TL;DR: 関数を再度実行して適切なユーザー入力を確認したいのですが、奇妙なループに陥ります

お時間とご尽力いただきありがとうございます。

4

1 に答える 1