Python学习之购物车
实现功能:
- 程序启动,提示用户输入用户名和密码,程序读取余额文件last_salary.txt内容(文件不存在则自动创建),若文件内容为空则提示“首次登录,请输入工资”;
- 用户可以输入商品编号进行购买;
- 用户选择商品后,自动计算总价,若总价超过账户余额salary,则提示余额不足;若总价未超过余额,则自动扣除;
- 用户可在购买过程中随时退出“q”;
- 关键信息高亮显示;
- 用户退出时,余额信息存入文件last_salary.txt,购买商品信息存入文件last_bucket.txt,文件不存在则自动创建;
- 用户再次登录时,读取并显示当前账户余额信息;
- 用户可在购买过程中输入“h”查询历史消费信息;
- 支持多个用户;
- 支持显示当前购物车商品数量;
- 当购物车为空,退出时显示提示信息。
示例代码:
# -*- coding: utf-8 -*- import os
from datetime import datetime goods = [
{"name": "电脑", "price": 1999},
{"name": "鼠标", "price": 10},
{"name": "游艇", "price": 20},
{"name": "美女", "price": 998},
] now = datetime.now().strftime('%Y-%m-%d %H:%M:%S') #获取当前时间
bucket = [] #定义空列表存储购买的商品
price_list = {} #将商品及其价格以“键值对”形式存入字典
total_price = item_price = 0
exit_flag = False
user_info = {'admin':'admin','alex':''} #定义用户名密码 #生成商品-价格字典
for i in goods:
a = list(i.values())
price_list.setdefault(a[0],a[1]) #生成商品名称列表
product_list = list(price_list) #开始
while not exit_flag:
username = input("用户名:").strip()
if username in user_info:
while not exit_flag:
userpasswd = input("密码:").strip()
if userpasswd == user_info.get(username):
if not os.path.isfile(username + '_last_salary.txt'): #判断username + '_last_salary.txt'是否存在,不存在则创建,存在则读取文件内容
with open(username + '_last_salary.txt', 'w+', encoding='utf-8') as f:
s = f.read()
else:
with open(username + '_last_salary.txt','r',encoding= 'utf-8') as f: #若username + '_last_salary.txt'文件存在,则读取内容
s = f.read()
if len(s): #如果username + '_last_salary.txt'不存在或为空,则表示用户首次登录,要求输入工资
salary = int(s)
print("\033[1;31;m*欢迎回来!账户余额:%d\033[0m " % salary)
else:
while True:
salary = input("\033[1;31;m*首次登录,请输入工资:\033[0m").strip() #首次登陆需输入工资
if salary.isdigit():
salary = int(salary)
break
else:
print("输入错误,请重试!")
print("-------商品列表------")
for n,i in enumerate(price_list):
print(n,i,price_list[i])
while not exit_flag: #要求用户输入商品编号
select = input("请选择商品:").strip()
if select.isdigit() and int(select) < len(goods): #判断输入的商品编号是否是数字,且在范围内
select = int(select)
p = product_list[select]
item_price = price_list[p]
total_price += item_price
if salary < item_price: #若余额小于所选商品价格,则提示余额不足
print("\033[1;31;m余额不足!\033[0m")
print(salary)
else: #若余额大于或等于所选商品价格,则扣除相应该商品对应价格并加入购物车
salary = salary - item_price
bucket.append(p)
print("\033[1;31;m \'%s\'已加入购物车! \033[0m" % p )
elif select == 'q': #若用户输入q退出,则:打印已购买商品列表;打印账户余额;将余额和购买记录分别存入不同文件
print("\033[1;31;m-------已购买商品-------\033[0m")
if len(bucket):
for n,p in enumerate(set(bucket)):
print(p,tuple(bucket).count(p))
else:
print("当前购物车为空!")
print("\033[1;31;m-----------------------\033[0m")
print("\033[1;31;m账户余额:%d\033[0m" % salary)
with open(username + '_last_salary.txt','w',encoding= 'utf-8') as f1:
f1.write(str(salary)) #将余额存入文件username + '_last_salary.txt'
with open(username + '_last_bucket.txt','a+',encoding= 'utf-8') as f2:
for i in bucket: #将消费记录存入文件username + '_last_bucket.txt',若文件不存在则创建,指定写入字符串编码为utf-8
f2.write(now + ' ' + i + '\n')
exit_flag = True
elif select == 'h': #当用户输入'h',读取并打印历史消费信息
print("--------历史购买商品-------")
if os.path.isfile(username + '_last_bucket.txt'):
with open(username + '_last_bucket.txt','r',encoding= 'utf-8') as f:
l = f.read()
print(l)
else:
with open(username + '_last_bucket.txt', 'w', encoding='utf-8') as f:
print("历史记录为空!")
else:
print("请输入商品编号!")
continue
else:
print("密码错误,请重试!")
else: print("用户不存在,请重试!")
代码写的有点冗余繁杂,后期再优化。
Python学习之购物车的更多相关文章
- Python学习--------------Atm+购物车系统
一.程序需求 模拟实现一个ATM + 购物商城程序: 1.额度 15000或自定义 2.实现购物商城,买东西加入 购物车,调用信用卡接口结账 3.可以提现,手续费5% 4.每月22号出账单,每月10号 ...
- python学习:购物车程序
购物车程序 product_list = [ ('mac',9000), ('kindle',800), ('tesla',900000), ('python book',105), ('bike', ...
- python 学习分享-购物车实操篇
程序要求如下: '''购物车程序: 启动程序后,输入用户名密码后,如果是第一次登录,让用户输入工资,然后打印商品列表 允许用户根据商品编号购买商品 用户选择商品后,检测余额是否够,够就直接扣款,不够就 ...
- Python学习笔记(十三)
Python学习笔记(十三): 模块 包 if name == main 软件目录结构规范 作业-ATM+购物商城程序 1. 模块 1. 模块导入方法 import 语句 import module1 ...
- Python学习计划
---恢复内容开始--- Python学习计划 https://edu.csdn.net/topic/python2?utm_source=blog4 匠人之心,成就真正Python全栈工程师 ...
- Python学习第五堂课
Python学习第五堂课推荐电影:华尔街之狼 被拯救的姜哥 阿甘正传 辛德勒的名单 肖申克的救赎 上帝之城 焦土之城 绝美之城 #上节内容: 变量 if else 注释 # ""& ...
- python学习笔记目录
人生苦短,我学python学习笔记目录: week1 python入门week2 python基础week3 python进阶week4 python模块week5 python高阶week6 数据结 ...
- Python学习day5作业
目录 Python学习day5作业 ATM和购物商城 1. 程序说明 2. 基本流程图 3. 程序测试帐号 4. 程序结构: 5. 程序测试 title: Python学习day5作业 tags: p ...
- Python学习系列(四)Python 入门语法规则2
Python学习系列(四)Python 入门语法规则2 2017-4-3 09:18:04 编码和解码 Unicode.gbk,utf8之间的关系 2.对于py2.7, 如果utf8>gbk, ...
随机推荐
- 基础10 多进程、协程(multiprocessing、greenlet、gevent、gevent.monkey、select、selector)
1.多进程实现方式(类似于多线程) import multiprocessing import time,threading def thread_run():#定义一个线程函数 print(&quo ...
- 在C#.net中如何操作XML
在C#.net中如何操作XML 需要添加的命名空间: using System.Xml; 定义几个公共对象: XmlDocument xmldoc ; XmlNode xmlnode ; XmlEle ...
- SQL链接字符串
Windows身份验证: Data Source=.;Initial Catalog=MyItcast;Integrated Security=True 数据库身份验证: Data Sou ...
- [Maven] Project build error: 'packaging' with value 'jar' is invalid. Aggregator projects require 'pom' as packaging.
将<packaging>jar</packaging> 改为<packaging>pom</packaging>
- 设置Tomcat的字符编码
在 server.xml 中的 Connector 标签在加入 URIEncoding="UTF-8" 属性. <Connector port="8080" ...
- 使用windows资源管理器打开jar
在命令行里输入: assoc .jar=CompressedFolder
- dell omsa管理工具
dell服务器raid管理工具 lsiutil dell sas6i/r MegaCli dell prec omsa管理raid分区 显示物理硬盘信息 omreport storage pdisk ...
- 使用BaiDu Java Script Web Api 在Web开发中嵌入地图使用步骤
前言 很多做企业网站的朋友,都喜欢有一个关于我们.联系我们的栏目,那么这个栏目放什么内容才能饱满那,只有放个地图才显得有点高大上. 一.产生并复制访问Api的密钥(AK) 1.首先我们需要注册一个百度 ...
- shell脚本学习(3)文件判断
shell常用的文件判断运算符如下: -e 文件是否存在 -f 文件是否是普通文件(不是目录.设备文件.链接文件) -s 表示文件大小不为0 -d 表示文件是否是目录 -b 表示是块设备(光驱.软 ...
- 开源框架 epics,开源画面编辑软件 edm
epics Experimental Physics and Industrial Control System 一套开源软件框架,实验物理和工业控制系统 http://www.aps.anl.gov ...