所以(你可能会从我的代码中看到)我是 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 作为输入时,我的 shell 开始输出我的字符串(不是一个选项让我们再试一次),就像它卡在一个循环中一样一千次。我想知道我到底做错了什么。
我试过的:
(1) 所以我首先尝试使用try 和 except来解决这个输入问题,当出现 ValueError 但仅适用于数字时运行 except 并且我没有设法重新运行 userWelcome()
(2) 我试图创建一个elif 语句,在该语句中检查整数的输入,但是它也陷入了循环。代码:
elif userInput.isalpha() == False:
print("Not an option! Let's try again.")
userWelcome()
无论如何,我希望这能很好地解释它。我已经忙了几个小时了,我想我会问这个。也许这是一个非常愚蠢的问题,但对我来说很难:)
TL;DR:想通过再次运行我的函数来检查正确的用户输入,陷入奇怪的循环
感谢您的时间和精力!