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: