博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python学习之购物车
阅读量:5095 次
发布时间:2019-06-13

本文共 5265 字,大约阅读时间需要 17 分钟。

实现功能:

  1. 程序启动,提示用户输入用户名和密码,程序读取余额文件last_salary.txt内容(文件不存在则自动创建),若文件内容为空则提示“首次登录,请输入工资”;
  2. 用户可以输入商品编号进行购买;
  3. 用户选择商品后,自动计算总价,若总价超过账户余额salary,则提示余额不足;若总价未超过余额,则自动扣除;
  4. 用户可在购买过程中随时退出“q”;
  5. 关键信息高亮显示;
  6. 用户退出时,余额信息存入文件last_salary.txt,购买商品信息存入文件last_bucket.txt,文件不存在则自动创建;
  7. 用户再次登录时,读取并显示当前账户余额信息;
  8. 用户可在购买过程中输入“h”查询历史消费信息;
  9. 支持多个用户;
  10. 支持显示当前购物车商品数量;
  11. 当购物车为空,退出时显示提示信息。

示例代码:

1 # -*- coding: utf-8 -*- 2  3 import os 4 from datetime import datetime 5  6 goods = [ 7 {
"name": "电脑", "price": 1999}, 8 {
"name": "鼠标", "price": 10}, 9 {
"name": "游艇", "price": 20},10 {
"name": "美女", "price": 998},11 ]12 13 now = datetime.now().strftime('%Y-%m-%d %H:%M:%S') #获取当前时间14 bucket = [] #定义空列表存储购买的商品15 price_list = {} #将商品及其价格以“键值对”形式存入字典16 total_price = item_price = 017 exit_flag = False18 user_info = {
'admin':'admin','alex':'123456'} #定义用户名密码19 20 #生成商品-价格字典21 for i in goods:22 a = list(i.values())23 price_list.setdefault(a[0],a[1])24 25 #生成商品名称列表26 product_list = list(price_list)27 28 #开始29 while not exit_flag:30 username = input("用户名:").strip()31 if username in user_info:32 while not exit_flag:33 userpasswd = input("密码:").strip()34 if userpasswd == user_info.get(username):35 if not os.path.isfile(username + '_last_salary.txt'): #判断username + '_last_salary.txt'是否存在,不存在则创建,存在则读取文件内容36 with open(username + '_last_salary.txt', 'w+', encoding='utf-8') as f:37 s = f.read()38 else:39 with open(username + '_last_salary.txt','r',encoding= 'utf-8') as f: #若username + '_last_salary.txt'文件存在,则读取内容40 s = f.read()41 if len(s): #如果username + '_last_salary.txt'不存在或为空,则表示用户首次登录,要求输入工资42 salary = int(s)43 print("\033[1;31;m*欢迎回来!账户余额:%d\033[0m " % salary)44 else:45 while True:46 salary = input("\033[1;31;m*首次登录,请输入工资:\033[0m").strip() #首次登陆需输入工资47 if salary.isdigit():48 salary = int(salary)49 break50 else:51 print("输入错误,请重试!")52 print("-------商品列表------")53 for n,i in enumerate(price_list):54 print(n,i,price_list[i])55 while not exit_flag: #要求用户输入商品编号56 select = input("请选择商品:").strip()57 if select.isdigit() and int(select) < len(goods): #判断输入的商品编号是否是数字,且在范围内58 select = int(select)59 p = product_list[select]60 item_price = price_list[p]61 total_price += item_price62 if salary < item_price: #若余额小于所选商品价格,则提示余额不足63 print("\033[1;31;m余额不足!\033[0m")64 print(salary)65 else: #若余额大于或等于所选商品价格,则扣除相应该商品对应价格并加入购物车66 salary = salary - item_price67 bucket.append(p)68 print("\033[1;31;m \'%s\'已加入购物车! \033[0m" % p )69 elif select == 'q': #若用户输入q退出,则:打印已购买商品列表;打印账户余额;将余额和购买记录分别存入不同文件70 print("\033[1;31;m-------已购买商品-------\033[0m")71 if len(bucket):72 for n,p in enumerate(set(bucket)):73 print(p,tuple(bucket).count(p))74 else:75 print("当前购物车为空!")76 print("\033[1;31;m-----------------------\033[0m")77 print("\033[1;31;m账户余额:%d\033[0m" % salary)78 with open(username + '_last_salary.txt','w',encoding= 'utf-8') as f1:79 f1.write(str(salary)) #将余额存入文件username + '_last_salary.txt'80 with open(username + '_last_bucket.txt','a+',encoding= 'utf-8') as f2:81 for i in bucket: #将消费记录存入文件username + '_last_bucket.txt',若文件不存在则创建,指定写入字符串编码为utf-882 f2.write(now + ' ' + i + '\n')83 exit_flag = True84 elif select == 'h': #当用户输入'h',读取并打印历史消费信息85 print("--------历史购买商品-------")86 if os.path.isfile(username + '_last_bucket.txt'):87 with open(username + '_last_bucket.txt','r',encoding= 'utf-8') as f:88 l = f.read()89 print(l)90 else:91 with open(username + '_last_bucket.txt', 'w', encoding='utf-8') as f:92 print("历史记录为空!")93 else:94 print("请输入商品编号!")95 continue96 else:97 print("密码错误,请重试!")98 else: print("用户不存在,请重试!")

代码写的有点冗余繁杂,后期再优化。

转载于:https://www.cnblogs.com/chfang007/p/8798681.html

你可能感兴趣的文章
收集WebDriver的执行命令和参数信息
查看>>
数据结构与算法(三)-线性表之静态链表
查看>>
mac下的mysql报错:ERROR 1045(28000)和ERROR 2002 (HY000)的解决办法
查看>>
Hmailserver搭建邮件服务器
查看>>
django之多表查询-2
查看>>
快速幂
查看>>
改善C#公共程序类库质量的10种方法
查看>>
AIO 开始不定时的抛异常: java.io.IOException: 指定的网络名不再可用
查看>>
MyBaits动态sql语句
查看>>
HDU4405(期望DP)
查看>>
拉格朗日乘子法 那些年学过的高数
查看>>
vs code 的便捷使用
查看>>
Spring MVC @ResponseBody返回中文字符串乱码问题
查看>>
用户空间与内核空间,进程上下文与中断上下文[总结]
查看>>
JS 中的跨域请求
查看>>
JAVA开发环境搭建
查看>>
vim插件ctags的安装和使用
查看>>
mysql基础语句
查看>>
Oracle中的rownum不能使用大于>的问题
查看>>
[Data Structure & Algorithm] 有向无环图的拓扑排序及关键路径
查看>>