Python 验证特殊字符和小写字母的If语句
下面的代码是用python 3编写的 我编写了一个函数,用于验证来自字典的密码是小写还是大写。代码如下Python 验证特殊字符和小写字母的If语句,python,Python,下面的代码是用python 3编写的 我编写了一个函数,用于验证来自字典的密码是小写还是大写。代码如下 def validatePassword(password): upperFlag = False lowerFlag = False specialFlag = False special = "$!&*" for char in password: if password.islower():
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的语法
是一种在长度范围内循环的简捷方法。它还可以方便地制作n维列表,如do_sth
,这将为您提供一个2-d 5x6的零列表[[0表示范围(5)中的i]表示范围(6)]
- 您可以检查一个字符串是否包含源代码中目标为
的其他字符串。这就是我检查特殊字符的方式
- 在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的语法
是一种在长度范围内循环的简捷方法。它还可以方便地制作n维列表,如do_sth
,这将为您提供一个2-d 5x6的零列表[[0表示范围(5)中的i]表示范围(6)]
- 您可以检查一个字符串是否包含源代码中目标为
的其他字符串。这就是我检查特殊字符的方式
- 在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