强壮的密码
题目来源
- checkio
需求
斯蒂芬和索菲亚对于一切都使用简单的密码,忘记了安全性。请你帮助尼古拉开发一个密码安全检查模块
- 如果密码的长度大于或等于10个符号,至少有一个数字,一个大写字母和一个小写字母,该密码将被视为足够强大
- 密码只包含ASCII拉丁字母或数字
- 输入: 密码 (str, unicode)
- 输出: 密码的安全与否,作为布尔值(bool),或者任何可以转换和处理为布尔值的数据类型。你会在结果看到转换后的结果(True 或 False)
分析
-
对一个字符串进行解析:
- 长度大于等于10
- 有一个数字
- 有一个大写
- 有一个小写
- 只是字母或数字
-
反向思路:
- 长度大于10的数字和字母组合字符串
- 不都是数字
- 不都是字母
- 不都是大写
- 不都是小写
想到的解决方式
- 正则表达式
- 字符串内置方法
代码实现
- 第一种方式
def check_strong(input_string):
'''
:param input_string:
:return:
'''
import re
flag = False
r1 = re.search('[a-z]+',input_string)
r2 = re.search('[A-Z]+',input_string)
r3 = re.search("[0-9]+",input_string)
r4 = re.search("w{10,}",input_string)
if r1 and r2 and r3 and r4:
flag = True
return flag
- 第二种方式
def check(psswd):
'''
:param psswd:
:return:
'''
return ( (len(psswd) >= 10) and #长度大于等于10
(not psswd.islower()) and # 不都是小写 (有大写)
(not psswd.isupper()) and # 不都是大写 (有小写)
(not psswd.isalpha()) and #不都是字母(有数字)
(not psswd.isdigit()) and # 不都是数字(有字母)
(psswd.isalnum())) # 只是数字和字母
知识点
正则表达式
字符串内置方法
-
str.isalnum()
:至少有一个字符并且所有的字符都是字母或者数字则返回True,否则返回False(判断是否含有标点符号等特殊字符) -
str.isalpha()
:至少有一个字符并且所有的字符都是字母则返回True,否则返回False(判断全是link字母,不区分大小写) -
str.isdecimal()
:如果str中只包含十进制数字则返回True,否则返回False -
str.isdigit()
:如果str中只包含数字则返回True,否则返回F -
str.islower()
:如果str中至少包含一个区分大小写的字符,并且所有的的这些字符(区分大小写的)字符都是小写则返回T,否则返回F -
str.isupper()
;如果str中至少包含一个区分大小写的字符,并且所有的的这些字符(区分大小写的)字符都是大写则返回T,否则返回F -
str.lstrip()
:裁掉str左边的空格 -
str.rstrip()
:裁掉str右边的空格 -
str.upper()
:转换str中的小写字母为大写 -
str.lower()
:转换str中的大写字母为小写 -
str.capitalize()
:把字符串的第一个字符大写 -
str.swapcase()
:反转大小写