难点: 多次购买出现bug,以后再优化吧

购物车程序: 1、启动程序后,输入用户名密码后,如果是第一次登录,让用户输入工资,然后打印商品列表 2、允许用户根据商品编号购买商品 3、用户选择商品后,检测余额是否够,够就直接扣款,不够就提醒 4、可随时退出,退出时,打印已购买商品和余额 5、在用户使用过程中, 关键输出,如余额,商品已加入购物车等消息,需高亮显示 6、用户下一次登录后,输入用户名密码,直接回到上次的状态,即上次消费的余额什么的还是那些,再次登录可继续购买 7、允许查询之前的消费记录

shopping.py 运行文件【同目录再创建个data文件夹】

#!/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()