Python 验证特殊字符和小写字母的If语句

Python 验证特殊字符和小写字母的If语句,python,Python,下面的代码是用python 3编写的 我编写了一个函数,用于验证来自字典的密码是小写还是大写。代码如下 def validatePassword(password): upperFlag = False lowerFlag = False specialFlag = False special = "$!&*" for char in password: if password.islower():

下面的代码是用python 3编写的

我编写了一个函数,用于验证来自字典的密码是小写还是大写。代码如下

def validatePassword(password):
    upperFlag = False
    lowerFlag = False
    specialFlag = False
    special = "$!&*"
    for char in password:
        if password.islower():
            lowerFlag = True
        elif password.isupper():
            upperFlag = True
        elif char in special:
            specialFlag = True
    return len(password) >= 8 and \
              lowerFlag and \
              upperFlag and \
              specialFlag 
这是我得到的输出 验证检查文件中的密码

                           March2021            INVALID
                         iudj8&neB09            INVALID
                           MyDogWo0f            INVALID
                             mv3m959            INVALID
                  ven1vid1v1c1Iulius            INVALID
                           123456789            INVALID
                         abcdefgcijk            INVALID
                          What#ItN0w            INVALID
                       windsofchange            INVALID
                       HelloMyNameIs            INVALID
                             4584208            INVALID
                             4586300            INVALID
                          Anniv&0629            INVALID
                           BDay@1955            INVALID
                          BigBadW0d!            INVALID
                       !Rf0donotcare            INVALID
                          R85r!4L145            INVALID
                           S3att!eWa            INVALID
                          SONameHere            INVALID
                              Abc!23            INVALID
我做错了什么?我把事情复杂化了吗?

回答,tl;博士 你的逻辑是错误的。下面是一个改进的代码:

def validatePassword(密码):
上限=任意(字母.isupper()表示密码中的字母)
lower=any(letter.islower()表示密码中的字母)
特价=“$!&*”
special=任何((密码中的s)用于specials中的s)
返回全部([special,lower,upper,len(密码)>=8])
解释
  • Python有一个内置函数,用于匹配一系列条件中的任何或所有条件。我使用函数
    any()
    检查密码中每个字母的大小写
  • 列表中x的语法
    do_sth
    是一种在长度范围内循环的简捷方法。它还可以方便地制作n维列表,如
    [[0表示范围(5)中的i]表示范围(6)]
    ,这将为您提供一个2-d 5x6的零列表
  • 您可以检查一个字符串是否包含源代码中目标为
    的其他字符串。这就是我检查特殊字符的方式
  • 在return语句中检查密码长度
结果
March2021:False
iudj8和neB09:正确
MyDogWo0f:错误
mv3m959:错误
静脉导管:假
123456789:错误
abcdefgcijk:False
什么?错了
windsofchange:错误
HelloMyNameIs:错
4584208:错误
4586300:错
安尼夫和0629:是的
BDay@1955:错
BigBadW0d!:真的
!Rf0donotcare:正确
R85r!4L145:对
S3att!埃瓦:是的
索纳梅:错
Abc!23:错
答案,tl;博士 你的逻辑是错误的。下面是一个改进的代码:

def validatePassword(密码):
上限=任意(字母.isupper()表示密码中的字母)
lower=any(letter.islower()表示密码中的字母)
特价=“$!&*”
special=任何((密码中的s)用于specials中的s)
返回全部([special,lower,upper,len(密码)>=8])
解释
  • Python有一个内置函数,用于匹配一系列条件中的任何或所有条件。我使用函数
    any()
    检查密码中每个字母的大小写
  • 列表中x的语法
    do_sth
    是一种在长度范围内循环的简捷方法。它还可以方便地制作n维列表,如
    [[0表示范围(5)中的i]表示范围(6)]
    ,这将为您提供一个2-d 5x6的零列表
  • 您可以检查一个字符串是否包含源代码中目标为
    的其他字符串。这就是我检查特殊字符的方式
  • 在return语句中检查密码长度
结果
March2021:False
iudj8和neB09:正确
MyDogWo0f:错误
mv3m959:错误
静脉导管:假
123456789:错误
abcdefgcijk:False
什么?错了
windsofchange:错误
HelloMyNameIs:错
4584208:错误
4586300:错
安尼夫和0629:是的
BDay@1955:错
BigBadW0d!:真的
!Rf0donotcare:正确
R85r!4L145:对
S3att!埃瓦:是的
索纳梅:错
Abc!23:错

在发布准确的代码之前,我想告诉您几点,这将有助于您发现错误并修复它们

调试提示:
  • 使用more prints语句检查变量值
  • 阅读您尝试使用的函数
  • 启用调试点并逐步执行程序
请通读有关内置函数及其输入和返回值的信息

供参考:

: : 工作代码
在发布确切的代码之前,我想告诉你几点,这将有助于你发现错误并修复它们

调试提示:
  • 使用more prints语句检查变量值
  • 阅读您尝试使用的函数
  • 启用调试点并逐步执行程序
请通读有关内置函数及其输入和返回值的信息

供参考:

: : 工作代码
在循环内部,您的迭代器是char
,但您正在使用password.islower()进行验证,是的,您将事情复杂化了。而
islower()
isupper()
将基于整个字符串返回
True/False
。在循环内部,您的迭代器是
char
,但您正在使用
密码进行验证。islower()
是的,您将事情复杂化了。而
islower()
isupper()
将基于整个字符串返回
True/False
Returns a Boolean stating whether the string (entire string) is in lower case.

"abcd".islower() will return True
"aBcd".islower() will return False
Returns a Boolean stating whether the string (entire string) is in upper case.


"ABCD".isupper() will return True
"ABcD".isupper() will return False
def validatePassword(password):
    upperFlag = False
    lowerFlag = False
    specialFlag = False
    special = "$!&*"
    for char in password:
        if char.islower():    # password.islower (will tell entire string is lower or not)
            lowerFlag = True
        elif char.isupper():  # password.islower (will tell entire string is upper or not)
            upperFlag = True
        elif char in special:
            specialFlag = True
    return len(password) >= 8 and \
              lowerFlag and \
              upperFlag and \
              specialFlag