购物车程序要求:
1、启动程序后,输入用户名密码后,如果是第一次登录,让用户输入工资,然后打印商品列表
2、允许用户根据商品编号选择商品
3、可查看已经选择的商品以及总价,所选商品总价大于工资提醒,
4、选好后确认结算,打印已购买商品和余额,可随时退出
5、在用户使用过程中, 关键输出,如余额,商品已加入购物车等消息,需高亮显示
6、用户下一次登录后,输入用户名密码,直接回到上次的状态,即上次消费的余额什么的还是那些,再次登录可继续购买
7、允许查询之前的消费记录
目标:
练习文件读写,列表和列表解析,函数使用,循环表达式.
程序流程:
1.开始,读取文本文件内容,商品文本和会员信息文本,生成商品列表,会员名密码工资列表,购物车列表和已购商品列表,进入2
2.输入用户名和密码,用户名密码错误就返回2重新输入,用户名密码正确进入3
3.判断工资是否为默认none,是none就输入工资,更新会员名密码工资列表,数据输出至会员信息文本保存再进入4,不是none直接进入4
4.显示不同操作,
输入q直接退出程序,
输入s进入42,
42.显示商品,选择商品序列把商品加入购物车, 更新列表,数据输出至会员信息文本保存,提示余额状态,再返回4,
输入p进入43,
43.余额充足,即结算购物车,更新各列表,数据输出至会员信息文本保存在返回4,余额不足,显示提示,直接返回4,
输入c进入44,
44.显示购物车商品,
选择要删除的商品序号,从购物车列表中删除,数据输出至会员信息文本保存再返回44,
选择b,返回4.
知识点:
1.文件读写
1 with open('file','r',) as f: 2 ..... # do something
打开文件的模式有:
- r,只读模式(默认)。
- w,只写模式。【不可读;不存在则创建;存在则删除内容;】
- a,追加模式。【可读; 不存在则创建;存在则只追加内容;】
"+" 表示可以同时读写某个文件
- r+,可读写文件。【可读;可写;可追加】
- w+,写读
- a+,同a
"U"表示在读取时,可以将 自动转换成 (与 r 或 r+ 模式同使用)
- rU
- r+U
"b"表示处理二进制文件(如:FTP发送上传ISO镜像文件,linux可忽略,windows处理二进制文件时需标注)
- rb
- wb
- ab
2.列表解析表达式
1 >>> list = [[1,2,3],[4,5,6],[7,8,9]] 2 >>> list 3 [[1, 2, 3], [4, 5, 6], [7, 8, 9]] 4 >>> col = [m[0] for m in list] # 提取list中各列表的第一个元素创建新列表col 5 >>> col 6 [1, 4, 7] 7 >>>
这个可以很方便的数据处理
3.函数使用,
定义: 函数是指将一组语句的集合通过一个名字(函数名)封装起来,要想执行这个函数,只需调用其函数名即可
特性:
- 减少重复代码
- 使程序变的可扩展
- 使程序变得易维护
语法定义
1 def sayhi():#函数名 2 print("Hello, I'm nobody!") 3 4 sayhi() #调用函数
可以带参数
1 #下面这段代码 2 a,b = 5,8 3 c = a**b 4 print(c) 5 6 7 #改成用函数写 8 def calc(x,y): 9 res = x**y 10 return res #返回函数执行结果 11 12 c = calc(a,b) #结果赋值给c变量 13 print(c)
4. while 循环和if...else表达式用于控制流程
5. 终端文字颜色显示.
格式: 33[显示方式;前景色;背景色m 说明: 前景色 背景色 颜色 --------------------------------------- 30 40 黑色 31 41 红色 32 42 绿色 33 43 黃色 34 44 蓝色 35 45 紫红色 36 46 青蓝色 37 47 白色 显示方式 意义 ------------------------- 0 终端默认设置 1 高亮显示 4 使用下划线 5 闪烁 7 反白显示 8 不可见 例子: 33[1;31;40m <!--1-高亮显示 31-前景色红色 40-背景色黑色--> 33[0m <!--采用终端默认设置,即取消颜色设置-->
代码:
1 with open('product_list', 'rU', encoding='utf-8') as f, 2 open('userinfo', 'rU', encoding='utf-8') as f2: 3 # 打开商品列表文件和会员信息文件 4 product_list = [pr.strip().split(',') for pr in f] # 构建商品列表 5 user_info = [u.split() for u in f2] # 构建会员信息列表 6 7 if len(user_info[1]) == 1: 8 cart = [] # 购物车是空 9 else: 10 cart = [c.strip().split(',') for c in user_info[1][1:]] # 去掉购物车标记标签user_info[1][0] 11 for i in cart: 12 i.pop() 13 # 处理多余的列表空元素 14 # 构建购物车列表 15 16 if len(user_info[2]) == 1: 17 purchased = [] # 已购商品为空 18 else: 19 purchased = [pu.strip().split(',') for pu in user_info[2][1:]] # 去掉已购商品标记标签user_info[2][0] 20 for i2 in purchased: 21 i2.pop() 22 # 处理多余的列表空元素 23 # 构建已购商品列表 24 username = user_info[0][0] 25 password = user_info[0][1] 26 salary = user_info[0][2] 27 # 提取信息方便使用 28 29 30 def consume(x): 31 money = 0 32 for gods in x: 33 money += int(gods[1])*int(gods[2]) 34 return money 35 # 计算商品总价函数 36 37 38 def my_cart(x): 39 for index, gods in enumerate(x): 40 price = str(int(gods[1])*int(gods[2])) 41 print('%s %s 单价:%s 数量:%s 合计:%s' % (str(index+1), gods[0], gods[1], gods[2], price)) 42 print('消费金额: 33[1;36m%s 33[0m' % str(consume(x))) 43 # 打印商品(购物车和已购商品通用)信息函数 44 45 46 def _cart(): 47 print('