Python学习的第二周作业--购物车
作业需求:
(1)启动程序后,输入用户名密码后,如果是第一次登录,让用户输入工资,然后打印商品列表
(2)允许用户根据商品编号购买商品
(3)用户选择商品后,检测余额是否够,够就直接扣款,不够就提醒
(4)可随时退出,退出时,打印已购买商品和余额
(5)在用户使用过程中, 关键输出,如余额,商品已加入购物车等消息,需高亮显示
(6)用户下一次登录后,输入用户名密码,直接回到上次的状态,即上次消费的余额什么的还是那些,再次登录可继续购买
(7)允许查询之前的消费记录
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 #!/usr/bin/env python 2 # -*- coding:utf-8 -*- 3 # Author:Ahappier 4 5 set = False 6 f =open ("user","r+",encoding="utf-8") #读取user文件 7 f_str = str(f.read()) #文件内容转字符串 8 for line in f_str: 9 f_str_str= str(f_str) #逐行读取 10 data = eval(f_str_str) #字符串转字典 11 name = input ("请输入账号:") 12 password = input ("请输入密码:") 13 while True: 14 if name in data: #判断用户名在字典 15 if password in data[name]: #判断密码在字典内与用户对应 16 salary = int (data[name][password]) 17 print ("\033[31;1m欢迎登陆,当前余额:%s\033[0m"%salary) 18 break 19 else: 20 print ("输入密码错误,请重新输入") 21 password = input ("请重新输入密码:") 22 continue 23 else: 24 salary_p ={} #定义密码、工资空字典 25 salary_input = input("请输入你的工资:") 26 salary = int (salary_input) #输入的工资转成数字 27 salary_p[password] = salary #密码与工资对应 28 data[name] =salary_p #用户名和密码 工资对应 29 f.seek(0) #文件读取移到开头 30 f.write(str(data)) #写入字典 31 f.tell() #返回到当前位置 32 break 33 34 h =open("history","r+",encoding="utf-8") 35 h_str =str(h.read()) 36 for line in h_str: 37 h_str_str=str(h_str) 38 data1=eval(h_str_str) #把history文件内容转成字典 39 if name not in data1: 40 data1[name]=[] #如果用户名第一次登陆名字不在字典内,历史记录为空 41 shoppinglist = data1[name] 42 shoppinglist_new =[] #再次购物的记录为空 43 choose = input ("\033[32;1m是否需要查询历史购物记录(y/n)\033[0m") #询问是否查询历史记录 44 if choose == "y": 45 print("----历史购物记录-----") 46 print (shoppinglist) 47 48 49 list =[ 50 ["Apple Iphone",6000], 51 ["Apple Watch",4600], 52 ["Books",600], 53 ["Bike",750], 54 ["cups",120], 55 ["Apple",50], 56 ["banana",60], 57 ] #购物清单 58 59 while not set: 60 print ("----商品清单----") 61 for index,i in enumerate(list): 62 print(index,i) #输入商品清单 63 number = input("输入你选择的商品标号") #选择编号 64 if number =="q": #当输入q时,退出,并打印清单 65 set =True 66 data[name][password]= salary #工资给对应的用户密码位置 67 f.seek(0) 68 f.write(str(data)) #用户信息写入到文件中 69 f.tell() 70 print("----已购商品清单----") 71 print (shoppinglist_new) #打印清单 72 print ("\033[31;1m你的余额:%s\033[0m"%salary)#打印余额 73 shoppinglist.extend(shoppinglist_new)#本次购物记录追加到购物列表中 74 data1[name]=shoppinglist #购物列表和用户名对应 75 h.seek(0) 76 h.write(str(data1)) #购物记录写入文件 77 h.tell() 78 elif number.isdigit == False: 79 print("\033[31;1m输入的不是编号,请重新输入\033[0m") 80 elif int(number)>int(len(list)) or int(number)<0: 81 print("\033[31;1m你购买的商品不在清单中\033[0m") 82 else: 83 number_buy =int(number)-1 84 if list[number_buy][1]<salary: 85 salary=salary-int(list[number_buy][1]) 86 shoppinglist_new.append(list[number_buy]) 87 else: 88 print ("\033[31;1m你的余额不足\033[0m")