首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >密码检查器UpperCase

密码检查器UpperCase
EN

Stack Overflow用户
提问于 2017-10-01 14:44:40
回答 3查看 3.2K关注 0票数 0

下面是我正在做的小程序

构建密码检查器。它将接受字符串输入。条件:密码字符串必须包含至少一个大写,一个小写,一个数字和长度必须是最少8个字符。否则它会说“无效密码”。

我正在尝试下面的代码

代码语言:javascript
复制
password = str(raw_input("Enter the password: "))

if password.isalnum() == False:
    print "Password should contain atleast one special character or number"
if password.isalnum() == False:
    print "Password should contain atleast one numeric number"
elif len(password)<8:
    print 'Too short'
elif password.isupper() == False:
    print 'Password should contain atleast one uppercase character'
elif password.islower() == False:
    print 'Password should contain atleast one lowercase character'
else:
    print "Password is OK"

但这是不一致的,它要求大写,即使在那里,

代码语言:javascript
复制
Enter the password: niswdgER41
Password should contain atleast one uppercase character
EN

回答 3

Stack Overflow用户

发布于 2017-10-01 14:55:32

您有几个错误,但最重要的是使用检查整个字符串是否保持条件的所有方法,而不是一次它的字符。

改为:

代码语言:javascript
复制
def validate_password(pwd):
    conds = [
        lambda s: any(x.isupper() for x in s),
        lambda s: any(x.islower() for x in s),
        lambda s: any(x.isdigit() for x in s),
        lambda s: len(s) >= 8
    ]

    return all(cond(pwd) for cond in conds)

但是,如果您确实希望用户知道缺少什么,可以使用以下实现:

代码语言:javascript
复制
def validate_password(pwd):
    conds = {
        "uppercase": lambda s: any(x.isupper() for x in s),
        "lowercase": lambda s: any(x.islower() for x in s),
        "number": lambda s: any(x.isdigit() for x in s),
        "length": lambda s: len(s) >= 8
    }

    valid = True
    for name, cond in conds.iteritems():
        if not cond(pwd):
            print "Password lacking " + name
            valid = False

    if valid:
        print "Password OK"
    else
        print "Password Invalid"
    return valid
票数 2
EN

Stack Overflow用户

发布于 2017-10-01 14:51:22

可以使用列表理解来检查字符串中的所有字符:

代码语言:javascript
复制
contains_upper_case_character = any([letter.isupper() for letter in password])

# contains_upper_case_character is True if password contains an uppercase letter.

如果您想将其扩展到更多的大写字母:

代码语言:javascript
复制
password = 'StrinG12'
upper_case_letters = [letter.isupper() for letter in password].count(True)

print(upper_case_letters)
>>> 2
票数 0
EN

Stack Overflow用户

发布于 2017-11-10 11:05:33

代码语言:javascript
复制
def checkpassword ():
    password = input ("please enter password")




def menu ():
    print ("1. Check Password")
    print ("2. Generate Password")
    print ("3. Quit")
    optionchoice = input (" please chose a menu,1,2,3")
    if optionchoice == "1":
        checkpassword()
    elif optionchoice == "2":
        pass
    elif optionchoice == "3":
        pass
    else :
        print ("invalid answer!")
        menu()


menu()   
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46513506

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档