一、需求

1、登录
{
‘xxx1’:{'passwd':'123','role':1,'moeny':10000,"carts":['mac']},
'xxx1':{'passwd':'123','role':2,'moeny':10000,"carts":[]}
}
#role是1的话,代表管理员,2代表普通用户
2、普通用户:
#查看所有的商品
#输入商品名称添加到购物车,减去对应余额
#可以查看自己购物车和余额,你已经买了xx东西,你还xxx钱
#退出
3、管理员:
#添加商品,商品名称,商品价格
#充值,输入用户名,给他加钱
#退出

二、全局变量和函数定义

USER_FILE全局变量,保存用户信息
GOODS_FILE全局变量,保存商品信息
rw_file()读写文件
isprice()判断输入金额是否合法
login()用户登录:
buyer()普通用户登录:
find()查找所有商品
buy()购买商品
get()查询购物车和余额
exit()退出
admin()管理员登录:
addgoods()添加商品
recharge()充值
exit()退出

三、实现代码

USER_FILE = 'users.txt'
GOODS_FILE = 'goods.txt' def rw_file(filename, content=0): #读和写文件
if content: #若content不为空,则判定为写文件
with open(filename,'w') as f:
f.write(str(content))
else: #若content为空,则判定为读文件
with open(filename,'r') as f:
f = eval(f.read())
return f def buyer(username):
menu = {
'': find,
'': buy,
'': get,
'': exit
}
while True:
choice = input("请输入你想执行的操作(输入【1】查看所有商品,输入【2】添加商品,输入【3】查询购物车和余额,输入【4】退出): ")
if choice not in menu:
print('输入错误,请重新输入')
else:
menu[choice](username) def admin():
menu = {
'': addgoods,
'': recharge,
'': exit
} # role为1时,为管理员
while True:
choice = input('请输入你想执行的操作(输入【1】添加商品,输入【2】充值,输入【3】退出): ')
if choice not in menu:
print('输入错误,请重新输入')
else:
menu[choice]() def login(): #定义用户登录函数,根据用户角色提供指定操作
users = rw_file(USER_FILE)
for i in range(3):
username = input("请输入账号: ")
passwd = input("请输入密码: ")
if username in users and passwd == users[username]['passwd'] :
if users[username]['role'] == '': #如果role为2,则为普通用户
print('欢迎光临')
buyer(username)
else:
print('您已管理员身份登录')
admin( )
else:
print('账号或密码错误,还能尝试%d次'%(2-i))
i += 1 def find(*args): #普通查看所有商品
with open('goods.txt') as f:
print('所有商品和价格列表: ', f.read()) def buy(username): #普通用户添加商品到购物车
users = rw_file(USER_FILE)
goods_all = rw_file(GOODS_FILE)
goods = input('请输入你要添加的商品: ')
if goods in goods_all:
if goods not in users[username]['carts']:
if users[username]['money'] >= goods_all[goods]:
users[username]['carts'].append(goods)
users[username]['money'] =float('%.2f'%(users[username]['money'] - goods_all[goods]))
with open('users.txt','w') as f2:
f2.write(str(users))
print('商品已成功添加到购物车')
else:
print('您的余额不足,请充值')
else:
print('购物车中已添加该商品,无需重复添加')
else:
print('您输入的商品不存在') def get(username): #普通用户查询购物车中的商品和余额
users = rw_file(USER_FILE)
if len(users[username]['carts']) > 0:
print('您的购物车中已有商品:{goods}'.format(goods = users[username]['carts']))
else:
print('您还未添加任何商品')
print('您的余额:{money}'.format(money=users[username]['money'])) def addgoods( ): #管理员添加商品
goods_all = rw_file(GOODS_FILE)
goods_name = input('请输入商品名称: ')
goods_price = input('请输入商品价格: ')
if len(goods_name.strip()) != 0:
if goods_name not in goods_all:
if isprice(goods_price):
goods_all[goods_name] = float('%.2f'%float(goods_price))
rw_file(GOODS_FILE,goods_all)
print('商品添加成功')
else:
print('商品价格必须是正数,请重新输入')
else:
print('该商品已存在,无需重复添加')
else:
print('商品名称不能为空,请重新输入') def recharge(): #管理员给指定账号充值
users = rw_file(USER_FILE)
username = input('请输入要充值的账号: ')
money = input('请输入要添加的金额: ')
if username in users and isprice(money):
users[username]['money'] = float('%.2f'%(users[username]['money'] + float(money)))
rw_file(USER_FILE, users)
print('操作成功')
else:
print('输入账号或金额有误,请重新输入') def isprice(price): #判断金额是否有效
if price.count('.') == 1 and price.split('.')[0].isdigit() and price.split('.')[1].isdigit():
return True
elif price.count('.') == 0 and price.isdigit():
return True
else:
return False login()

Python实现购物小程序的更多相关文章

  1. Python编写购物小程序

    购物车要求: 用户名和密码存放于文件中 启动程序后,先登录,登录成功则让用户输入工资,然后打印商品列表,失败则重新登录,超过三次则退出程序 允许用户根据商品编号购买商品 用户选择商品后,检测余额是否够 ...

  2. python 的 购物小程序

    money = input('请输入您的工资:') shop = [("iphone",5800),("ipod",3000),("book" ...

  3. python学习day4--python基础--购物小程序

    '''购物小程序:用户启动时先输入工资用户启动程序后打印商品列表允许用户选择购买商品允许用户不断购买各种商品购买时检测余额是否够,如果够直接扣款,否则打印余额不足允许用户主动退出程序,退出时打印已购商 ...

  4. 【Python精华】100个Python练手小程序

    100个Python练手小程序,学习python的很好的资料,覆盖了python中的每一部分,可以边学习边练习,更容易掌握python. [程序1] 题目:有1.2.3.4个数字,能组成多少个互不相同 ...

  5. 整理了适合新手的20个Python练手小程序

    100个Python练手小程序,学习python的很好的资料,覆盖了python中的每一部分,可以边学习边练习,更容易掌握python. 本文附带基础视频教程:私信回复[基础]就可以获取的 [程序1] ...

  6. 利用python实现微信小程序游戏跳一跳详细教程

    利用python实现微信小程序游戏跳一跳详细教程 1 先安装python 然后再安装pip <a href="http://newmiracle.cn/wp-content/uploa ...

  7. 京东购物小程序 | Taro3 项目分包实践

    背景 京东购物小程序作为京东小程序业务流量的主要入口,承载着许多的活动和页面,而很多的活动在小程序开展的同时,也会在京东 APP 端进行同步的 H5 端页面的投放.这时候,一个相同的活动,需要同时开发 ...

  8. 微信小程序开发:python+sanic 实现小程序登录注册

    开发微信小程序时,接入小程序的授权登录可以快速实现用户注册登录的步骤,是快速建立用户体系的重要一步.这篇文章将介绍 python + sanic + 微信小程序实现用户快速注册登录全栈方案. 微信小程 ...

  9. Python实现微信小程序支付功能

    由于最近自己在做小程序的支付,就在这里简单介绍一下讲一下用python做小程序支付这个流程.当然在进行开发之前还是建议读一下具体的流程,清楚支付的过程. 1.支付交互流程 当然具体的参数配置可以参考官 ...

随机推荐

  1. 洛谷P4287 [SHOI2011]双倍回文(回文自动机)

    传送门 听说有大佬用manacher$O(n)$过此题……太强啦…… 说一下PAM的做法吧.(看了题解之后发现)蛮简单的 我们肯定要先建出回文自动机的 然后如果是枚举每一个节点暴跳fail指针肯定得T ...

  2. MCP|ZWT|Precision de novo peptide sequencing using mirror proteases of Ac-LysargiNase and trypsin for large-scale proteomics(基于Ac-LysargiNase和胰蛋白酶的蛋白组镜像de novo测序)

    一.概述 由于难以获得100%的蛋白氨基酸序列覆盖率,蛋白组de novo测序成为了蛋白测序的难点,由Ac-LysargiNase(N端蛋白酶)和胰蛋白酶构成的镜像酶组合可以解决这个问题并具有稳定性, ...

  3. windows系统IIS7环境下如何部署MVC项目

    首先打开IIS:第一步:添加MVC程序映射 打开其中的:处理程序映射,如下图: 点击界面右边操作中的:添加脚本映射,弹出下图: 请求路径:*           可执行文件:c:/Windows/Mi ...

  4. 讲完.class,Class之后,继续。

    讲完.class,Class之后,继续. 1)泛化的Class引用 Class也可以加入泛型,加入之后会进行类型检查. 贴一下书上原话,Class<?>优于Class,虽然他们是等价的,C ...

  5. jmeter-CSV Data Set Config

    在使用Jemeter测试的时候,往往需要参数化用户名,密码以到达到多用户使用不同的用户名密码登录的目的.这个时候我们就可以使用CSV Data Set Config实现参数化登录: 首先通过Test ...

  6. linux网络配置详解

    一:相关网络配置的文件 1.网卡名配置相关文件 网卡名命名规则文件: /etc/udev/rules.d/70-persistent-net.rules # PCI device 0x8086:0x1 ...

  7. Jmeter report优化

    优化大致过程 生成并的报告模板: <?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet ...

  8. sublime text的一些插件

    http://naotu.baidu.com/file/57a3154312a7c7a444353202a4e06cd2 Package Control 作为安装 Sublime Text 插件的必备 ...

  9. .netcore中无法使用System.Drawing --解决方案

    问题重现: 无法正常使用  解决方法: 安装System.Drawing.Common的NuGet就能正常使用了 操作之后: 这个是.netcoe中的解决办法,.net framework解决方案中添 ...

  10. mathjax;latex

    \lfloor $\lfloor$ \rfloor $\rfloor$ \sum_{i=1}^{n} $\sum_{i=1}^{n}$ \mu $\mu$ \mid $\mid$ \Leftright ...