我是Python编程的新手,但我想做一个密码检查器来检查单个字符串输入中的某些内容。如果任何方法返回else,我想重新启动while循环。
def length():
if len(password) > 8:
print("Password is long enough. ")
else:
print("Password too short, please try a new password. ")
def numbers():
if len([num for num in password if num.isdigit()]) >= 2:
print("Password has two digits. ")
else:
print("Password needs two digits, please try a new password. ")
def lower():
if any(map(str.islower, password)):
print("Password has lower case. ")
else:
print("Password needs an lowercase letter, please try a new password.")
def upper():
if any(map(str.isupper, password)):
print("Password has upper case. ")
else:
print("Password needs an uppercase letter, please try a new password.")
while True:
password = str(input("What is your password? \n"))
length()
numbers()
lower()
upper()
我不知道我能做些什么来有效地通过这些方法,并检查我是否得到了我想要的结果。
4条答案
按热度按时间8hhllhi21#
你可以这样做:
简单回顾一下
any
和all
的工作原理:它们都将布尔值列表作为参数,并且如果列表中的任何(或所有)元素是True
,则返回True
。在这个想法的基础上,我们首先列出了我们必须用来验证密码的函数(
functions_to_check
)。然后我们将循环直到密码有效。
我们通过构建一个布尔值列表来检查密码是否有效,这些布尔值表示密码是否通过了每次检查(
map(lambda f: f(password), functions_to_check)
:我们将每个验证函数应用于密码并将结果存储在列表中),然后我们检查该列表的所有元素是否都是True
(我们将其作为参数传递给all
函数)。然后,我们将
all
函数的结果存储到用于继续循环的变量中,如果密码有效,则破解。vnjpjtjt2#
你可以从你的函数中返回一个布尔值,作为while循环是否应该继续的标志。
如果密码中没有大写字母,则函数返回True,因此循环将继续调用upper()。
我鼓励你尝试找到如何实现它的所有功能。
lpwwtiir3#
1.为函数添加参数。
1.让函数返回
bool
值。1.如果满足所有条件,则使用
break
中断while
-循环。fcy6dtqo4#
返回布尔值的另一种方法是使用异常:
另外,你可能想跳出
while True
循环。为此,你可以使用break
或return
(如果它在函数内部)。使用异常并不比其他方法更好也更差,它更像是一种不同的风格(参见"ask for forgiveness not permission")。