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, ...
随机推荐
- pat1082. Read Number in Chinese (25)
1082. Read Number in Chinese (25) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yu ...
- 百度网页分享js代码
1.小图标 <div class="bdsharebuttonbox"> <a href="#" class="bds_qzone& ...
- Java方法-对指定信息基于相关维度进行分组
近期项目中需要针对多种不同来源指定的相同类型内容进行合并,实现过程中需要根据指定的相关维度,对资源内容进行分组,如识别是否可以为同一人员信息,是否为同一个歌曲或影视信息,因此针对实现的具体细节做如下备 ...
- SSRS 参数 单选 多选
前段时间 公司要求报表的选项可以多选. 知道需求后,研究了下实现. 首先我们创建一个报表,然后添加3个数据集,2个参数,如下图. DataSet1数据集:存放主数据. ddl_emplid数据集:存放 ...
- Java 利用poi读取excel
import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.Inpu ...
- Gulp工具常用插件
gulp-uglify(js压缩) gulp-uglify安装 // npm install --save-dev gulp-uglify 已过时 npm install --save-dev jsh ...
- Android TextView之空格占位法
在Android布局中进行使用到空格,为了实现文字的对齐.具体要怎么使用了? •请忽视文中‘& #160’中&和#之间的空格 空格: & #160; 窄空格: & #8 ...
- sharepoint国内网站一览表(转发)
中国石油化工集团公司http://www.sinopecgroup.com/Pages/index.aspx () 中国南方航空http://group.csair.com/_layouts/grou ...
- Mahara-16.10 (Ubuntu 16.04)
平台: Ubuntu 类型: 虚拟机镜像 软件包: mahara-16.10 commercial education elearning mahara open source 服务优惠价: 按服务商 ...
- CEFSharp在anycpu下的编译
记录一篇博文,将CEFSharp在AnyCpu下使用: 地址:http://pengxiaobo123.blog.163.com/blog/static/20471515420172164593726 ...