Python3实现购物车功能
作者:爱跳舞的青年君 发布时间:2021-01-15 08:43:10
标签:python3,购物车
本文实例为大家分享了Python3实现购物车功能的具体代码,供大家参考,具体内容如下
购物车要求:
1、启动程序后,输入用户名密码后,如果是第一次登录,让用户输入工资,然后打印商品列表
2、允许用户根据商品编号购买商品
3、用户选择商品后,检测余额是否够,够就直接扣款,不够就提醒
4、可随时退出,退出时,打印已购买商品和余额
5、在用户使用过程中, 关键输出,如余额,商品已加入购物车等消息,需高亮显示
6、用户下一次登录后,输入用户名密码,直接回到上次的状态,即上次消费的余额什么的还是那些,再次登录可继续购买
7、允许查询之前的消费记录
逻辑图:
执行代码:
#!/usr/bin/env python3
# Author: Robert
# --*-- coding: utf-8 --*--
set = False #设置set 当输入为q就可以退出
file = open("购物车用户信息档案.txt","r+",encoding="utf-8") #读取购物车用户信息文件
f = str(file.read()) #将文件内容转化成字符串
for line in f:
file_str = str(f)
data = eval(file_str) #将字符串转换为字典data
name = input("输入姓名:")
password = input("输入密码:")
while True:
if name in data: #用户在档案中
if password in data[name]: #密码和用户名对应,校验正确,登录。
salary = float(data[name][password])
print('''\033[32;1m欢迎登录,当前余额为%s\033[0m'''%salary)
break
else: #否则密码错误,请重新输入
password = input("密码错误,请重新输入:")
continue
else: #否则判断为首次登录,将用户名,密码,工资存到用户信息文件中
password_salary = {}
salary_str = input("欢迎首次登录,请输入你的工资:")
salary = float(salary_str)
password_salary[password] = salary #工资对应到密码
data[name] = password_salary #将密码-工资对应到用户名
file.seek(0)
file.write(str(data))
file.tell()
break
list = [#购物清单
["iphone",5800],
["sifei",800],
["macbook",17500],
["book",75],
["apple",5]
]
file_list_r = open("历史购物信息.txt","r+",encoding="utf-8")
file_list_r = str(file_list_r.read())
shoppinglist_dict = eval(file_list_r)
if name not in shoppinglist_dict:
shoppinglist_dict[name] = []
shoppinglist = shoppinglist_dict[name]
shoppinglist_dict_now = []
choose = input("\n是否需要查询历史购物记录(y/n):")
if choose == 'y':
print("\n\n---------->历史购物记录<----------")
print(shoppinglist)
print("---------->结束<----------")
while not set: #购物车开始
print("---------->商品清单<----------")
for index,item in enumerate(list,1):
print(index,item)
print("---------->结束<----------")
number = input("请输入想购买商品编号:")
if number == "q":
set = True
data[name][password] = str(salary)
file.seek(0)
file.write(str(data))
file.tell()
print("---------->购物清单<----------")
print(shoppinglist)
print("您的余额:",salary)
print("---------->结束<----------")
shoppinglist.extend(shoppinglist)
shoppinglist_dict[name] = shoppinglist
elif number.isdigit() == False:
print("\033[31;1m输入不是编号内容,请重新输入\033[0m")
elif int(number)>int(len(list)) or int(number)<= 0: #输入值不在清单中,报错
print("\033[31;1m您所购买的商品不在清单中\033[0m")
else:
number_buy = int(number)-1
if list[number_buy][1]<(salary): #如果余额足够,提示购买成功并显示余额。
salary = salary - int(list[number_buy][1])
msg = '\033[32;1m您已经将%s加入购物车中,余额为%d\033[0m'%(list[number_buy][0],salary)
print(msg)
shoppinglist.append(list[number_buy]) #将本次购物信息加到购买记录中
else:
print("\033[31;1m余额不足,无法购买!\033[0m") #提示余额不足
购物车用户信息档案.txt
{'name': {'password': '10000'}, 'cx': {'123': '725.0'}, 'robert': {'qw': '440.0'}, 'cv1': {'1': 100.5}, 'ROBERT': {'QW': 1560.0}, 'qwe': {'qw': '1555.0'}}
历史购物信息.txt
{'name': [['iphone', 5800],['bike', 800]], 'cx':[['iphone', 5800],['apple', 5],['apple', 5], ['book', 75]]}
来源:https://blog.csdn.net/weixin_39099836/article/details/78389167
0
投稿
猜你喜欢
- 1.jsvar obj=document.getElementById(selectid);obj.options.length = 0;
- 目录1. 配置Python环境变量2. 安装Python编辑器,并在其中配置Python3. 安装控制包uiautomator2,和其它辅助
- 回调函数回调函数是一个对象(实现了特定方法的类实例),它在调用fit()时被传入模型,并在训练过程中的不同时间点被模型调用可以访问关于模型状
- gitignore是什么文件就是git软件要忽略的文件列表,如果要忽略某些文件,,在Git工作区的根目录下创建一个特殊的.gitignore
- 简洁版Windows10系统下,按Win+R键启动运行,输入cmd,进入命令窗口输入conda info --envs,查看conda 环境
- 1 深分页问题1.1 创建表CREATE TABLE `player` ( `id` bigint(20) NOT NULL A
- #过滤式特征选择#根据方差进行选择,方差越小,代表该属性识别能力很差,可以剔除from sklearn.feature_selection
- 直接上代码,可以写在公共文件common和继承的基础类中,方便调用/* * $name为表单上传的name值 *
- Vue中内置了很多的指令,如v-model、v-show、v-html等,但是有时候这些指令并不能满足我们,或者说我们想为元素附加一些特别的
- 前言Python语言提供了Socket套接字来实现网络通信。Python的应用程序通常通过Socket"套接字"向网络发
- 一、为什么难 秒杀系统难做的原因:库存只有一份,所有人会在集中的时间读和写这些数据。例如小米手
- 本文实例讲述了Python Tensor FLow简单使用方法。分享给大家供大家参考,具体如下:1、基础概念Tensor表示张量,是一种多维
- 区域(Area)是一个 ASP.NET MVC 功能,用于将相关功能组织为一个单独的命名空间(用于路由)和文件结构(用于视图)。使用区域通过
- 本文实例讲述了Python3实现取图片 * 定的像素替换指定的颜色。分享给大家供大家参考,具体如下:1、原始图片2、修改脚本:# -*- co
- 自动扫雷一般分为两种,一种是读取内存数据,而另一种是通过分析图片获得数据,并通过模拟鼠标操作,这里我用的是第二种方式。一、准备工作1.扫雷游
- 1. 内连接内连接:合并具有同一列的两个以上的表的行,结果集中不包含一个表与另一个表不匹配的行。说人话就是,查询结果只包含它们匹配的行,不匹
- 需求我在最近的一个任务中,存在一个redis高并发计算多个客户端接收预警信息的时长问题。模型是首先模拟多个客户端连接预警服务器集群,然后向预
- 从小的方面讲,帮助一般是指:手册、说明书、文档、FAQ 等等。从大的方面讲,可以是交互过程中的提示、指引、演示等信息,帮助无处不在!这一切,
- EXISTS该函数返回集合中第一个元素的索引,如果集合为空,返回NULLNULLNULLCollection.EXISTS(index)CO
- 本篇概要1.线程与多线程2.进程与多进程3.多线程并发下载图片4.多进程并发提高数字运算关于并发在计算机编程领域,并发编程是一个很常见的名词