实现功能:

  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 = 0
17 exit_flag = False
18 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                             break
50                         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_price
62                         if salary < item_price:              #若余额小于所选商品价格,则提示余额不足
63                             print("\033[1;31;m余额不足!\033[0m")
64                             print(salary)
65                         else:                               #若余额大于或等于所选商品价格,则扣除相应该商品对应价格并加入购物车
66                             salary = salary - item_price
67                             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-8
82                                 f2.write(now + ' ' + i + '\n')
83                         exit_flag = True
84                     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                         continue
96             else:
97                 print("密码错误,请重试!")
98     else: print("用户不存在,请重试!")

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

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

Python学习之购物车相关推荐

  1. 【Python学习】程序练习《购物车程序》

    [Python学习]程序练习<购物车程序> 需求: 启动程序后,让用户输入工资,然后打印商品列表 允许用户根据商品编号购买商品 用户选择商品后,检测余额是否够,够就直接扣款,不够就提醒 可 ...

  2. Python学习day5作业-ATM和购物商城

    Python学习day5作业 Python学习day5作业 ATM和购物商城 作业需求 ATM: 指定最大透支额度 可取款 定期还款(每月指定日期还款,如15号) 可存款 定期出账单 支持多用户登陆, ...

  3. python学习笔记目录

    人生苦短,我学python学习笔记目录: week1 python入门week2 python基础week3 python进阶week4 python模块week5 python高阶week6 数据结 ...

  4. Python学习day5作业

    目录 Python学习day5作业 ATM和购物商城 1. 程序说明 2. 基本流程图 3. 程序测试帐号 4. 程序结构: 5. 程序测试 title: Python学习day5作业 tags: p ...

  5. 用python做一个购物车编程_利用python实现简单的循环购物车功能示例代码

    本文主要给大家介绍了关于python实现循环购物车功能的相关内容,分享出来供大家参考学习,下面来一起看看详细的介绍: 示例代码 # -*- coding: utf-8 -*- __author__ = ...

  6. Python学习笔记(十三)

    Python学习笔记(十三): 模块 包 if name == main 软件目录结构规范 作业-ATM+购物商城程序 1. 模块 1. 模块导入方法 import 语句 import module1 ...

  7. Python学习 Week2 part1

    本周内容较多,一时间消化不了,分两段写出来 part1:列表和元组 part2:字符串和字典等 列表 #列表的定义 #list=['list0','list1','list2'','...'] nam ...

  8. 01 Python学习--第一周--开课介绍、数据类型、数据运算、表达式、循环、三元运算、对象基本概念...

    模块一主要内容 开课介绍 python发展介绍 第一个python程序 变量 字符编码与二进制 字符编码的区别与介绍 用户交互程序 if else流程判断 while 循环 while 循环优化版本 ...

  9. python实现购物车总结,Python实现的购物车功能示例

    本文实例讲述了Python实现的购物车功能.分享给大家供大家参考,具体如下: 这里尝试用python实现简单的购物车程序... 基本要求: 用户输入工资,然后打印购物菜单 用户可以不断的购买商品,直到 ...

  10. 淘宝秒杀脚本(python学习笔记)

    淘宝秒杀脚本(python学习笔记) 最近在自学python中,闲的无聊把最近学的内容和查阅的文档资料结合写了个简单的淘宝秒杀脚本,测试结果可以在2s左右完成下单,当然肯定和post方式的秒杀脚本没法 ...

最新文章

  1. 「新闻」Google Science Fair
  2. CentOS安装ClickHouse
  3. 计算机编程是考研什么专业,程序员考研该不该继续选择计算机专业
  4. 华为苏州人工智能研发基地揭牌 将容纳上万名工作人员
  5. 【笔记】LR录制方式和常用函数
  6. HDU1285 确定比赛名次【拓扑排序】
  7. Python 基礎 - 函數介紹
  8. SQL必知必会 课后题答案
  9. ubuntu(乌班图) 修改ip
  10. yolo算法部分简单理解
  11. 神经网络求解二阶常微分方程(代码)
  12. 微软代码审查工具_微软代码审查的工作方式
  13. C语言学习系列二十六——二维数组定义
  14. pip升级scapy报错It is a distutils installed project and thus we cannot accurately determine which files
  15. 通用后台管理系统前端界面Ⅺ——信息列表页(弹窗复用增改、CRUD前端基础实现)
  16. java blowfish 算法_Java Blowfish对称密钥加密算法的实现和加密案例
  17. signature=3e113c2e337ada93de6227c65daceed1,Informed Consent: It Is More Than Just a Document
  18. 华为RIP动态路由实例
  19. 走入SVG-姜威-专题视频课程
  20. RAM和ROM是什么?RAM和ROM其实都是内存

热门文章

  1. 翻译连载 | 附录 C:函数式编程函数库-《JavaScript轻量级函数式编程》 |《你不知道的JS》姊妹篇...
  2. sql server数据库文件的迁移(mdfldf文件)
  3. 森林病虫防治系统 (一)
  4. suse linux操作系统安全加固(服务关闭)
  5. javascript 光标位置
  6. python 并发编程 多线程 守护线程
  7. 2019年第五届计蒜之道复赛总结
  8. 在sae中运行web.py应用
  9. 在开源UOJ的导航栏中添加新页面链接
  10. CentOS_5.5_安装GCC编译LiME