《python编程快速上手——让繁琐工作自动化》实践项目——强口令检测

题目:

写一个函数,它使用正则表达式,确保传入的口令字符串是强口令。强口令的定义是:长度不少于 8 个字符,同时包含大写和小写字符,至少有一位数字。你可能需要用多个正则表达式来测试该字符串,以保证它的强度。

个人思路:使用多个正则来确保各个条件符合。如果有一项符合则标记为True。如长度条件符合那么length = True。

长度:

python 复制代码
import re

def super_safe_pw(s):
    r = re.compile(r'.{8,}')
    e = r.search(s)
    length = 0
    if e is None: #r.search(s) is None 而不是e.group()
        print('长度低于8')

    else:
        print('长度合格')
        length = 1

定义函数super_safe_pw,参数为字符串s。

python 复制代码
r = re.compile(r'.{8,}')

'.'可以匹配除换行符外的所有字符{8,}表示至少8个

数字:

python 复制代码
r = re.compile(r'\d+')
    e = r.search(s)
    number = False
    if e is None:
        print('没有一个数字,不是强口令')
    else:
        print('数字合格')
        number = True

\d表示匹配数字,后面添加了一个'+',代表至少匹配一个数字。

小写:

python 复制代码
r = re.compile(r'[a-z]+')
    e = r.search(s)
    L_letters = False
    if e is None:
        print('没有小写字母')
    else:
        print('小写字母合格')
        L_letters = True

[a-z]直接匹配a到z内的字母,'[a-z]+'表示匹配一个或多个小写字母。

大写:

python 复制代码
r = re.compile(r'[A-Z]+')
    e = r.search(s)
    U_letters = False
    if e is None:
        print('没有大写字母')
    else:
        print('大写字母合格')
        U_letters = True

[A-Z]匹配大写字母,'[A-Z]+'匹配一个或多个大写字母。

若 length is True and L_letters is True and U_letters is True and number is True,那么就是强口令了。

完整代码如下:

python 复制代码
import re


def super_safe_pw(s):
    r = re.compile(r'.{8,}')
    e = r.search(s)
    length = False
    if e is None:  # r.search(s) is None 而不是e.group()
        print('长度低于8')

    else:
        print('长度合格')
        length = True

    r = re.compile(r'\d+')
    e = r.search(s)
    number = False
    if e is None:
        print('没有一个数字,不是强口令')
    else:
        print('数字合格')
        number = True

    r = re.compile(r'[a-z]+')
    e = r.search(s)
    L_letters = False
    if e is None:
        print('没有小写字母')
    else:
        print('小写字母合格')
        L_letters = True

    r = re.compile(r'[A-Z]+')
    e = r.search(s)
    U_letters = False
    if e is None:
        print('没有大写字母')
    else:
        print('大写字母合格')
        U_letters = True

    if length is True and number is True and L_letters is True and U_letters is True:
        print(f'{s}是强口令')
    else:
        print('不是强口令')


d = 'jij25865Y'
super_safe_pw(d)

结果:

python 复制代码
长度合格
数字合格
小写字母合格
大写字母合格
jij25865Y是强口令

如有错误,欢迎指出。如果疑问,我会再评论区回复。如果有更好的代码,希望能够分享一下。

相关推荐
lozhyf几秒前
基于 Flask 与 MySQL 构建简单的博客系统
python·mysql·flask
爱丫爱6 分钟前
Python中常见库 PyTorch和Pydantic 讲解
开发语言·pytorch·python
诚信爱国敬业友善11 分钟前
GUI编程(window系统→Linux系统)
linux·python·gui
sekaii12 分钟前
ReDistribution plan细节
linux·服务器·数据库
查理零世27 分钟前
【蓝桥杯集训·每日一题2025】 AcWing 6134. 哞叫时间II python
python·算法·蓝桥杯
紫雾凌寒37 分钟前
解锁机器学习核心算法|神经网络:AI 领域的 “超级引擎”
人工智能·python·神经网络·算法·机器学习·卷积神经网络
焱焱枫1 小时前
自适应SQL计划管理(Adaptive SQL Plan Management)在Oracle 12c中的应用
数据库·sql·oracle
sun lover1 小时前
conda简单命令
python·conda
2301_793069821 小时前
Spring Boot +SQL项目优化策略,GraphQL和SQL 区别,Spring JDBC 等原理辨析(万字长文+代码)
java·数据库·spring boot·sql·jdbc·orm
hhw1991121 小时前
spring boot知识点5
java·数据库·spring boot