难点: 多次购买出现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()