'''
需求:
1、启动程序后,输入用户名密码后,让用户输入工资,然后打印商品列表 2、允许用户根据商品编号购买商品 3、用户选择商品后,检测余额是否够,够就直接扣款,不够就提醒 4、可随时退出,退出时,打印已购买商品和余额 5、在用户使用过程中, 关键输出,如余额,商品已加入购物车等消息,需高亮显示
6、用户下一次登录后,输入用户名密码,直接回到上次的状态,即上次消费的余额什么的还是那些,再次登录可继续购买
说明:运行此程序需要自己再在相同的目录里新建balance.txt与shopping_car.txt文件分别存放余额与所购物品
'''
#源代码
#登陆用户名及密码 username = 'whw' password = '123' #商品列表 goods = [ {"name": "电脑", "price": 1999}, {"name": "鼠标", "price": 10}, {"name": "游艇", "price": 20}, {"name": "美女", "price": 998}, {'name':'1080ti','price':2222}, {'name':'机械键盘','price':555}, {'name':'《西游记》','price':56}, {'name':'固态硬盘','price':666} ] #若用户名密码不正确直接退出系统 print('-------------用户登陆----------------') input_user = input('请输入用户名:') input_pass = input('请输入密码:') if input_user != username or input_pass != password: print('\033[31;1m很遗憾登陆失败\033[0m') exit() #用户名及密码正确后进行接下来的操作 print('\033[32;1m登陆成功!\033[0m') #在balance.txt 与 shopping_car.txt 中找之前的记录 file_balance = open('balance.txt','r') file_balance_data = file_balance.read() #注意要把文件读取第一次的值赋给变量,后面不要再次进行read()操作了! if file_balance_data != '': #balance文件中如果有记录说明之前购买过东西 #print('原来的余额:',file_balance_data) wages = int(file_balance_data) #利用上次的余额赋给wages #上次购买的购物车的物品 file_shopping_car = open('shopping_car.txt','r') shopping_car_old = file_shopping_car.read() print('\033[32;3m-----您的购物车共有以下商品-----\033[0m') print(shopping_car_old) #直接打印即可 print('\033[32;3m您上次购买后的余额为:%d\033[0m' % wages) #若没之前的记录就输入工资新开始 else: wages = input('请输入工资:')#不建议直接int(),如果输入字符就会报错,需先用isdigit()方法判断下 if wages.isdigit():#isdigit方法 判断是否输入的全是数字 wages = int(wages) else: print('\033[32;3m抱歉您输入了错误的字符,程序退出!\033[0m') exit() shopping_car = [] while 1: print('-----商品列表-----') for i,v in enumerate(goods): print(i,":",v) print('-----可进行的操作-----') print('一:输入相应的商品编号购买商品') print('二:输入Q/q以退出程序') choice = input('请输入要购买的商品编号或要进行的操作:') #===========购买===================== if choice.isdigit(): #isdigit()方法 if 0 <= int(choice) < len(goods): #先确认在编号范围 if goods[int(choice)].get('price') <= wages:#工资不得少于所选商品的价格 wages -= goods[int(choice)].get('price') shopping_car.append(goods[int(choice)]) print('\033[32;3m商品 %s 已添加进购物车!\033[0m' % goods[int(choice)])#将商品添加进购物车 print('\033[31;3m您的余额为:%d\033[0m ' % wages) else: print('\033[31;3m对不起,您的余额不足以购买该商品\033[0m') else: print('\033[31;3m请输入正确的商品编号或操作编号\033[0m') #=========退出,打印已购买的商品并显示余额,并将余额与购物车物品写到文件里=========================== elif choice =='q' or choice == 'Q': print('\033[32;3m-----您已购买以下商品-----\033[0m') for index,k in enumerate(shopping_car): print(index,':',k) print('\033[32;3m账户余额为:%d\033[0m'% wages) #余额存到balance.txt中,购物车存到shopping_car.txt中 file1 = open('balance.txt', 'w') #file1.truncate() # 因为'w'方式本身可以清空原来的内容,故不用清空原有的余额 file1.write(str(wages))#将新的余额信息写进去 file1.close() file2 = open('shopping_car.txt','a') file2.write(str(shopping_car)) file2.close() break else: print('\033[31;3m请输入正确的操作编号!\033[0m')