难点: 屡次购买出现bug,之后再优化吧python
购物车程序:
一、启动程序后,输入用户名密码后,若是是第一次登陆,让用户输入工资,而后打印商品列表
二、容许用户根据商品编号购买商品
三、用户选择商品后,检测余额是否够,够就直接扣款,不够就提醒
四、可随时退出,退出时,打印已购买商品和余额
五、在用户使用过程当中, 关键输出,如余额,商品已加入购物车等消息,需高亮显示
六、用户下一次登陆后,输入用户名密码,直接回到上次的状态,即上次消费的余额什么的仍是那些,再次登陆可继续购买
七、容许查询以前的消费记录git
shopping.py 运行文件【同目录再建立个data文件夹】app
#!/use/bin/env python # -*- coding:utf-8 -*- import os BASE_DIR = os.path.dirname(__file__) # 当前路径 DATA_DIR = os.path.join(BASE_DIR,'data') # 指定路径 def login(): # 登陆 username = input("请输入用户名:") if user_exit(username): # 检测用户是否存在 while True: password = input("请输入密码:") new_user_file = os.path.join(DATA_DIR, username) with open(new_user_file,"r",encoding="utf-8") as f: f1 = f.read() if f1.split()[1] == password: # 判断密码是否正确 lishi = input("是否查询消费记录,请输入y/n:") if lishi == 'y' or lishi == 'Y': with open(new_user_file, "r",encoding="utf-8") as f: for index, i in enumerate(range(3)): s = f.readline().strip() if index == 2: if s[14:-1] =="": # 判断记录为空的话提示暂无购物记录 print("\033[31;1m暂无购物记录\033[0m") print(s[14:-1]) # print("-----",f.split()[5]) money = int(f1.split()[3]) shopping(username,money,password) break else: print("密码错误,请从新输入密码!") else: # 不存在的话就跳到注册 register(username) return True def user_exit(name): # 检测用户是否存在 user_info_file = os.path.join(DATA_DIR,name) if os.path.exists(user_info_file): # print("此用户文件存在!") return True else: print("此用户文件不存在,欢迎注册。") return False def register(name): # 新用户注册 print("您是新用户",name) while True: password = input("请输入新密码-->:") if len(password.strip()) > 0: new_user(name,password) print("注册成功!") return login() else: print("密码不能为空,或空格,请从新输入-->:") def new_user(name,password): # 把新用户的信息转成str保存到文本中 user_money = input("您是新用户请输入工资:") user_list = '''password %s'''.strip()%password\ +"\n"+'''balance %s'''.strip()%user_money\ +"\n"+'''shopping_log []'''.strip() new_user_file = os.path.join(DATA_DIR,name) with open(new_user_file,"w",encoding="utf-8") as f: f.write(str(user_list)) def shopping(username,money,password): # 购买商品 shopping = [] goods = [("IPhone8", 6000), ("book", 20), ("Python", 80), ("JAVA", 65), ("Mac", 7000)] while True: for index, goods_list in enumerate(goods): print(index, goods_list) user_choice = input("请选择您要购买的商品编号,按q退出:") if user_choice.isdigit(): # 判断是否数字类型 user_choice = int(user_choice) if user_choice < len(goods): # 判断长度是否超过了goods长度 goods_list = goods[user_choice] if goods_list[1] < money: # 买的起 shopping.append(goods_list) money -= goods_list[1] print("\033[31;1m您已购买:%s,余额为:%s\033[0m" % (goods_list, money)) else: # 买不起 print("余额不足!只剩下%s了" % (money)) else: print("请输入正确的商品编号:") elif user_choice == 'q': print("--------购物清单---------") new_user_file = os.path.join(DATA_DIR, username) with open(new_user_file, "r",encoding="utf-8") as f: for index, i in enumerate(range(3)): s = f.readline().strip() if index == 2: s=s[14:-1] #获取历史购物信息 if s =="": # 判断历史记录为空的话添加,有历史记录的话追加 user_shopping = [] else: user_shopping = [s] # 定义列表(历史购物信息也在列表中) for sp in shopping: print(sp) user_shopping.append(sp) #购买商品追加到列表 # print("user_shopping-----",user_shopping) print("您的余额为%s" % (money)) user_list = '''password %s'''.strip() % password+ "\n" + ''' balance %s'''.strip() % money+ "\n" + ''' shopping_log %s'''.strip()%(user_shopping) new_user_file = os.path.join(DATA_DIR, username) with open(new_user_file, "w", encoding="utf-8") as f: f.write(str(user_list)) exit() else: print("请输入正确的商品编号:") login()