Python3.3密码检查器
我正在创建一个程序,检查密码是否足够强:Python3.3密码检查器,python,Python,我正在创建一个程序,检查密码是否足够强: 他们需要帽子 小写 数字 符号和 不能包含简单密码 正如你在下面看到的,这只是我的一些代码,我有一个菜单和一个密码检查器,唯一的问题是,检查器似乎不像我输入密码时那样工作,它总是说这是一个强密码,即使它不包含任何大写字母、数字或符号。下面是到目前为止我的代码 import random #importing random import time #importing time global Menu def Menu(): global o
- 他们需要帽子
- 小写
- 数字
- 符号和
- 不能包含简单密码
import random #importing random
import time #importing time
global Menu
def Menu():
global optionchoice #globalising variable optionchoice so that it can be used inside of another def of the code
print("Hey, Welcome to PassWordChecker.")
time.sleep(2) #delaying the next line for 2 seconds
print("Please choose one of the options below." )
time.sleep(1)
print("MENU:")
print("***")
print(" press 1 once for : password checker ")
print(" press 2 twice for : password generator")
print(" press 3 two or three times to : Quit ")
print(" ***") #creating a basic menu
optionchoice = (input("which option would you like to choose?"))
def checkpasswordandinput():
global optionchoice
optionchoice = optionchoice
if optionchoice == '1':
print(" please enter a password. ")
UserPassword = input("")
if len(UserPassword) <= 8 or len(UserPassword) >= 24 or UserPassword == UserPassword.isupper() or UserPassword == UserPassword.isdigit() or UserPassword == UserPassword.islower() or UserPassword == UserPassword.isalpha():
print("make sure your password includes numbers and upper and lower case letters ")
UserPassword = input('please enter a new password')
else:
print('your password is a very good one that is difficult to crack')
return Menu()
以
UserPassword==UserPassword.isupper()形式进行的检查将不起作用。这里,您将一个字符串(密码)与一个布尔值(isX()
的结果)进行比较。因此,所有这些检查都是False
,您可以进入else
分支(如果长度可以接受)
对于大写和小写字符,您可以使用
UserPassword==UserPassword.upper()
(只是upper
,而不是isupper
,类似于lower()
),即将密码与其大写/小写版本进行比较,但对于数字,这不起作用。相反,您可以使用any
检查任何字符是否为数字:any(c.isdigit()表示UserPassword中的c)
编辑:您可以使用
UserPassword==UserPassword.upper()
检查密码是否不包含任何小写字母,这有点不直观。相反,我建议对所有检查使用any
,并反转条件,以便在if
s主体中显示“阳性”,在else主体中显示“阴性”。大概是这样的:
up = UserPassword
if 8 <= len(up) <= 24 and any(c.isupper() for c in up) and any(c.islower() for c in up) and any(c.isdigit() for c in up) and any(c.isalpha() for c in up):
up=UserPassword
如果8那么您需要执行以下操作:
hasUpper = False
hasLower = False
hasDigit = False
等等
然后,一次检查一个字符的“密码”:
即字符串[1],字符串[2],字符串[3]
在其上运行布尔结果(isupper、islower等)
如果为true,请将您的hasUpper、hasLower、hasDigit更改为true
然后,检查整个字符串后,根据需要检查布尔结果。即:
如果要求为上限、下限和数字
if hasUpper = True and hasLower = True and hasDigit = True:
那么它就是一个很好的密码,等等
有意义吗?这个问题需要xkcd参考:UserPassword==UserPassword.islower()
这些检查没有意义。您正在将字符串与布尔值进行比较。我尝试运行您的代码,但什么也没发生。然后我添加了一个对菜单()
和checkpasswordandinput()
的调用,我假设这是在您的真实代码中,但您出于某种原因将其从问题中删除了。我试着输入密码“废话”,它正确地说“确保你的密码包括数字和大小写字母”。你说你的程序总是说密码很强,但这不是我看到的。请提供一个实际演示您的问题的示例。tobias_k好的,但我想知道如何确保密码有一些大写字母,而不是所有大写字母,您有什么建议吗?谢谢如果密码及其小写版本不相同,它会有一个或多个大写符号。您的意思是如果hasUpper==True…
?(或者只是hassupper
;不管怎样,==True
都是多余的)是的-我的道歉-要么有效:“if hassupper”要么“if hassupper==True”
hasUpper = False
hasLower = False
hasDigit = False
if hasUpper = True and hasLower = True and hasDigit = True: