实例4:简单的密码校验
源代码:
def check_len(pwd):if len(pwd) >= 8:return True else:return Falsedef check(pwd): check=[0,0,0,0]for char in pwd:if char.islower(): check[0]=1if char.isupper(): check[1]=1if char.isdigit(): check[2]=1if not (char.isalpha()|char.isdigit()|char.isspace()): check[3]=1print(check)if sum(check)<4:return False else:return Truedef check_rep(pwd): n=len(pwd)for i in range(n-4): str1=pwd[i:i+4] str2=pwd[i+4::]if str1 in str2:return False else:return Trueif __name__ == '__main__': msg='密码标准为:'print(msg)while True: pwd=input('Enter your password: ')if pwd=='q':print('exit program....')breakvcheck1=check_len(pwd)if not vcheck1:print('Invalid password')continuevcheck2=check(pwd)if not vcheck2:print('Invalid password')continuevcheck3=check_rep(pwd)if not vcheck3:print('Invalid password')continueprint('Password is valid')break
感悟:
在常见的app软件中都有一个设置自己密码的操作,比如要求位数,大小写,特殊字符等等,本案例的目的就在于写这样一个程序来检验输入的密码是否满足上述的要求,本质上就是在判读密码的字符是不是满足要求,开始之前需要做一些补充的知识:
1)vbool=str.isdigit()判断str字符串是否是数字;
2)vbool=str.isalpha()判断str字符串是否是字母;
3)vbool=str.isspace()判断str字符串是否是空格;
4)vbool=str.isupper()判断str字符串是否是大写字母;
5)vbool=str.islowerr()判断str字符串是否是小写字母。
解释一下上述代码:
if __name__ == '__main__': msg='密码标准为:'print(msg)while True: pwd=input('Enter your password: ')if pwd=='q':print('exit program....')breakvcheck1=check_len(pwd)if not vcheck1:print('Invalid password')continuevcheck2=check(pwd)if not vcheck2:print('Invalid password')continuevcheck3=check_rep(pwd)if not vcheck3:print('Invalid password')continueprint('Password is valid')break
1.
if __name__ == '__main__': msg='密码标准为:'print(msg)
这里是说明要设置的密码标准是什么,位数、大小写等等
2.
while True: pwd=input('Enter your password: ')if pwd=='q':print('exit program....')break开始循环判断流程,这里说一下while的用法:
用法:在条件为 True 时,重复执行一段代码;当条件为 False 时,循环结束。
while 条件:
循环体
而这里条件直接就是true,也就是每次循环条件都是真的,进行循环即可。
Break则是强制去结束循环,直接退出,与之相对的是continue则是跳过这个循环,继续执行下面的语句,继续循环。
3.
vcheck1=check_len(pwd)if not vcheck1:print('Invalid password')continue这句是为了判断位数够不够,注意这里不够的话是打印Invalid password,然后continue,返回的是下个循环也就是pwd=input('Enter your password: '),再次输入密码,如果满足则进行后续的判断。
4.
vcheck2=check(pwd)if not vcheck2:print('Invalid password')continue这句是在检验是否为大小写字母,数字或者其他符号组成,这里的continue则是同样的用法。
5.
vcheck3=check_rep(pwd)if not vcheck3:print('Invalid password')continueprint('Password is valid')break这句目的是检查密码是否有重复的字符串,continue也是同样的用法。
三个判断都要满足才会输出Password is valid,然后break直接结束循环。
这里对于每个函数并没有进行解释说明,有疑问的朋友可以留言,看到就会回复。