昨日内容回顾
购物车编写流程概要
- 购物车功能框架搭建
1.以功能需求列出空函数
2.创建功能字典
3.循环打印功能
- 注册功能
1.动态创建db文件夹
2.获取用户数据
3.拼接存储用户数据的文件路径
4.判断文件路径是否存在
5.如果存在则表示用户已注册
6.如果不存在构建用户字典(诸多键值对)
7.json序列化到文件中
- 登录功能
1.获取用户数据
2.拼接存储用户数据的文件路径
3.判断文件路径是否存在
4.如果存在则获取用户的真实数据
5.用真实数据与用户数据做比对
6.使用全局大字典记录用户的登录状态(用户名)
7.如果不存在则提示错误信息
- 校验用户身份
1.装饰器模版
2.根据全局大字典是否存储了用户名判断是是否可执行被装饰函数
- 添加购物车
1.校验用户身份(装饰器自动完成)
2.循环打印商品数据(枚举)
3.获取用户输入的商品编号
4.针对编号做一些比较小的完善处理(纯数字 范围)
5.根据编号获取商品数据
6.获取用户购买的数量
7.创建一个临时购物车字典存储用户想买的商品
8.获取用户真实数据中的购物车
9.判断购物车中是否已经含有商品数据
10.如果有则采用自增的方式
11.如果没有则采用新键值对的方式
12.将用户数据重新序列化到文件中
- 结算购物车
1.通过登录的用户名获取用户数据
2.获取购物车数据
3.计算购物车中商品的总价
4.判断总价是否小于用户账户余额
5.如果小于或等于则完成扣款并清空购物车 最后重新写入
6.如果大于则提示用户余额不足 并保持购物车数据不变
今日内容详细
正则表达式
引入
正则表达式不属于任何一门编程语言 是一个独立的学科
主要式用于数据的查找与筛选
需求:编写代码校验用户输入的手机号是否合法
纯python代码逻辑实现
常见的手机号开头 13 15 17 18 19
# 1.获取用户输入的手机号
phone_num = input('请输入您的手机号>>>:').strip()
# 2.判断用户输入的手机号是否是纯数字
if phone_num.isdigit():
# 3.判断总长度是否是11位
if len(phone_num) == 11:
# 4.判断是否以常见的电话号码开头 13 15 17 18 19
if phone_num.startswith('13') or phone_num.startswith('15') or phone_num.startswith(
'17') or phone_num.startswith('18') or phone_num.startswith('19'):
print('手机号合法')
print(int(phone_num))
else:
print('手机号开头不对')
else:
print('手机号必须是11位')
else:
print('手机号必须是纯数字')
正则表达式实现
import re
phone_num = input('把你的手机号告诉我>>>:').strip()
if re.match('^[13|15|17|18|19][0-9]{9}',phone_num):
print(phone_num)
else:
print('输入不合法')
正则表达式实现
import re
phone_num = input('把你的手机号告诉我>>>:').strip()
if re.match('^[13|15|17|18|19][0-9]{9}',phone_num):
print(phone_num)
else:
print('输入不合法')
正则表达式本质上就是使用一些符号的组合产生一些特殊的含义然后去字符串中筛选出符合条件的数据
正则表达式 字符组
'''字符组在没有量词修饰的情况一次只会针对一个数据值'''
[0-9] 匹配0到9之间的任意一个数字(包括0和9)
全称是:[0123456789]
[A-Z] 匹配A到Z之间的任意一个字母(包括A和Z)
全称是:[ABCD...WXYZ]
[a-z] 匹配A到Z之间的任意一个字母(包括a和z)
全称是:[abcd...wxyz]
在中括号内编写的多个数据值彼此都是或的关系
[0-9a-zA-Z]
数字、小写字母、大写字母都可以
正则表达式 特殊符号
特殊符号在没有量词修饰的情况一个符号一次只会针对一个数据值
符号 | 作用 |
---|---|
. | 匹配除换行符以外的任意字符 |
\w | 匹配字母或数字或下划线 |
\W | 匹配非字母或数字或下划线 |
\d | 匹配数字 |
^ | 匹配字符串的开头 |
$ | 匹配字符串的结尾 |
a|b | 匹配字符a或字符b |
() | 给正则表达式分组 不影响正则表达式的匹配 |
[] | 匹配字符组中的字符 |
[^] | 匹配除了字符组中字符的所有字符 |
正则表达式 量词
符号 | 作用 |
---|---|
* | 重复零次或更多次(默认就是尽可能多) |
+ | 重复一次或更多次(默认就是尽可能多) |
? | 重复零次或一次(默认就是一次) |
{n} | 重复n次 |
{n,} | 重复n次或更多次 |
{n,m} | 重复n到m次(优先m次) |
正则表达式练习
海. 海燕海娇海东
^海. 海燕海娇海东
海.$ 海燕海娇海东
李.? 李杰和李莲英和李二棍子
李.* 李杰和李莲英和李二棍子
李.+ 李杰和李莲英和李二棍子
李.{1,2} 李杰和李莲英和李二棍子
李[杰莲英二棍子]* 李杰和李莲英和李二棍子
李[^和]* 李杰和李莲英和李二棍子
[\d] 456bdha3
[\d]+ 456bdha3
正则表达式 贪婪与非贪婪
待匹配的文本:<script>alert(123)</script>
正则表达式:<.*> # 贪婪匹配
上述正则匹配出来的内容是:<script>alert(123)</script>
正则表达式:<.*?> # 非贪婪匹配
上述正则匹配出来的内容是:<script> </script>
"""
所有的量词默认都是贪婪匹配 但是如果在量词的后面紧跟一个问号
那么就会变成非贪婪匹配
小技巧:以后我们在使用贪婪匹配或者非贪婪匹配的时候一般都是用.*或者.*?
并且结束的标志有上述符号左右两边添加的表达式决定
"""
正则表达式 取消转义
正则表达式中取消斜杠与字母的特殊含义 就是在斜杠前面加斜杠
\\n \n
\\\\n \\n
在python中有更加简便的写法
r'\n'
r'\\n'