If语句打印所有条件



我正在尝试建立一个密码强度检查器功能。

def passwordStrengthCheck():
password = "Passw0rd!"
lower = any(letter.islower() for letter in password)
upper = any(letter.isupper() for letter in password)
num = any(char.isdigit() for char in password)

if len(password) < 8:
print("Password does not meet requirements.")
elif not lower:
print("Password does not meet requirements.")
elif not upper:
print("Password does not meet requirements.")
elif not num:
print("Password does not meet requirements.")
else:
for char in password:
if not (char.isalpha() or char.isdigit() or char == ' '):
print("Password is accepted.")
else:
print("Password does not meet requirements.") 
passwordStrengthCheck()

我得到的输出是这个

Password does not meet requirements.
Password does not meet requirements.
Password does not meet requirements.
Password does not meet requirements.
Password does not meet requirements.
Password does not meet requirements.
Password does not meet requirements.
Password does not meet requirements.
Password is accepted.

我不明白为什么我得到每个选项加上一些额外的作为输出。我希望得到一个密码符合或不符合要求的输出。

与其每次只检查一个字符并在此基础上打印结果,不如检查所有字符再决定密码是否符合要求。

在这里,您应该检查字符串中是否有字符不是字母数字或空格,在这种情况下接受密码。换句话说,如果所有字符都是字母数字或空格,则该密码不符合要求。

# other checks...
elif all(char.isalpha() or char.isdigit() or char == ' ' for char in password):
print("Password does not meet requirements.")
else:
print("Password is accepted")