python3实现购物车小程序,优化后将程序分成函数,用文件注册和验证用户名密码。


#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time : 2020/4/20 下午4:12
# @Author : hk
# @Site :
# @File : 购物车.py
# @Software: PyCharm """
需求描述:
1.输入正确账号,密码,进入购物车购物
2.登录失败,重新输入账号密码
3.同一账号连续登录失败超过三次,则锁定该账号
4.登录已锁定账号,提示账号已锁定
  """

#显示已购商品列表函数
def shoping_list(myshping,money):
print('=============您的购物清单如下=================')
dic1={}
for i in myshping:
if dic1.get(i) == None:
dic1[i] =1
else:
dic1[i] +=1
for k,v in dic1.items():
print(k,v)
print("===========================================\n您的余额:%d"%money)
#购物车函数
def shoping():
goods = [{'name': '电脑', 'price': 1999},
{'name': '鼠标', 'price': 10},
{'name': '游艇', 'price': 20},
{'name': '美女', 'price': 998},
{'name': 'iphone', 'price': 5000}, ]
flag = False
my_shopping = []
while True:
money = input("请输入您的金额:\n")
if not money.isdigit():
keys = input("输入错误,请按任意键重新输入,或输入q退出购买\n")
if keys.upper() == 'Q':
break
continue
money = int(money)
while True:
print('+++++++++++商品列表+++++++++++++')
for index, key in enumerate(goods):
print(index + 1, key['name'], key['price']) # 这里key取到的值是每一行的字典,再按key字典的键值打印出来商品明细
print('我的钱包余额', money)
num = input("请输入想要购买的商品序号:【或输入q结束购买】\n")
if num.upper() == 'Q':
flag = True
break
if not num.isdigit():
print("输入错误,请重新输入!") continue
num = int(num)
if num > 0 and num < len(goods) + 1:
# print(num,"开始购物\n----------")
if money >= goods[num - 1]['price']:
my_shopping.append(goods[num - 1]['name'])
money = money - goods[num - 1]['price']
shoping_list(my_shopping,money)
# print(my_shopping, "我的余额", money)
else:
# print("余额不足")
while True:
chongzhi = input("余额不足,请输入充值金额:【或输入q结束购买。]\n")
if chongzhi.upper() == "Q":
flag = True
break
if not chongzhi.isdigit():
# keys_1=input("输入错误,请重新输入充值金额:或输入q结束购买。。。充值部分的错误]")
# if keys_1.upper() == "Q":
# flag = True
# break
print("输入错误,请重新输入")
continue
money = money + int(chongzhi)
break
# break if flag == True:
break
else:
print("请输入正确商品编号")
continue
if flag == True:
# 打印出购物清单并统计,显示余额。
print("谢谢光临!")
shoping_list(my_shopping,money)
exit(0)
continue #注册函数
def regist():
"""
注册用户
name: 用户名称
password:用户密码
:return:
""" # 读取用户文件
with open("user.txt", encoding='utf-8',mode="r") as read_file:
read_data = read_file.readlines()
i_name = []
for i in read_data:
i_line = i.strip().split(',')
i_name.append(i_line[0])
while True:
username = input('请输入用户名:\n').strip()
if username in i_name:
print('用户名已经存在,请重新输入。')
continue
else:
password = input('请输入密码:\n').strip()
with open('user.txt',encoding='utf-8',mode='a') as read_f1:
new_user = [username,password,'0']
new_user ='\n' + ','.join(new_user)
# print(new_user,type(new_user))
read_f1.write(new_user)
print('%s,恭喜您注册成功,请登录'%username)
break
#修改用户登录次数函数
def modify_user(name, mode="add"):
"""
修改用户名单中的登录错误次数
:param name: 用户名称
:param mode:add,登录错误次数自增1;del,登录错误次数重置为0
:return:
""" # 读取用户文件
with open("user.txt", encoding='utf-8',mode="r") as read_file:
read_data = read_file.readlines() # 写入用户文件
with open("user.txt", encoding='utf-8',mode="w") as write_file:
for line in read_data:
new_line = line.split(',')
if new_line[0] == name:
if mode == "add":
new_line[2] = int(new_line[2]) + 1
new_line[2] = str(new_line[2])
print(">>>>>>>",new_line)
else:
new_line[2] = "0"
new_line = ",".join(new_line) + "\n"
write_file.write(new_line)
# print('写入',new_line)
write_file.flush()
else:
write_file.write(line) #验证用户名密码函数
def auth(name, passwd):
with open("user.txt", encoding='utf-8',mode="r") as read_file:
for eachLine in read_file:
user_name, password, errors = eachLine.strip().split(',')
if name == user_name:
if int(errors) < 3:
if password == passwd:
print ("Dear [%s],欢迎你登录本购物车" % name)
modify_user(name, "del")
shoping()
# return True
else:
print ("密码错误,请重新输入用户名密码!")
modify_user(name, "add")
return False
else:
print ("您的用户已经锁定,请联系管理员!")
return False
else:
print ("用户名不存在,请重新输入!")
return False def login():
while True:
name = input("请输入用户名:")
passwd = input("表输入密码:")
if auth(name, passwd):
break
def menu() :
while True:
mode = input('请您注册或登录:\n'
'注册选1\n'
'登录选2\n'
'或按输入q退出\n').strip()
if mode == '1':
regist()
elif mode == '2':
login()
elif mode.upper() == 'Q':
exit(0)
else:
print("输入错误,请重新输入,或按q退出。")
continue if __name__ == '__main__':
menu()

user.txt文件内容

hk,123,2

abc,222,2

haha,1,1

test,1234,0

python3购物车的更多相关文章

  1. python3 购物车小程序,余额写入文件保存

    python3 购物车小程序,余额写入文件保存 #!/usr/bin/env python # -*- coding:utf-8 -*- # Author:Hiuhung Wan goods = ( ...

  2. python3 购物车 增改查终极版~

    还是先来条NLP再说,快没了,以后想抄还没有... 十一,没有挫败,只有回应讯息 “挫败”只是指出过去的做法得不到预期的效果,是给我们需要改变的信号. “挫败”只是在事情画上句号时才能用上,欲想事情解 ...

  3. python3 购物车练习

    # 购物车# 功能要求:# 要求用户输入总资产,例如:2000# 显示商品列表,让用户根据序号选择商品,加入购物车# 购买,如果商品总额大于总资产,提示账户余额不足,否则,购买成功.# 可充值.某商品 ...

  4. python3 购物车

    今天干了啥?喂了喂龟,看了看鱼... 然后就是学习了两个模块:sys模块和os模块,突然觉得python真的好,只要英语学的好,看代码超级舒服的说,嗯,我要好好学英语,今天背了几个啥,唉.写完博客再背 ...

  5. Python3 list与循环练习(购物车)

    #!/usr/bin/env python3 # -*- coding: utf-8 -*- # Author;Tsukasa product_list = [ ('Iphone',5800), (' ...

  6. Python3.5 Day2作业:购物车程序

    需求: 1. 启动程序后,用户通过账号密码登录,然后打印商品列表. 2. 允许用户根据商品编号购买商品. 3. 用户选择商品后,检测余额是否足够,够就直接扣款,不够就提醒充值. 4. 可随时退出,退出 ...

  7. python3 练习题(用函数完成登录注册以及购物车的功能)

    ''' 用函数完成登录注册以及购物车的功能 作业需求: 1,启动程序,用户可选择四个选项:登录,注册,购物,退出. 2,用户注册,用户名不能重复,注册成功之后,用户名密码记录到文件中. 3,用户登录, ...

  8. python3 练习题(购物车)

    '''购物车程序需求:1.启动程序后,让用户输入工资,然后打印商品列表2.允许用户根据商品编号购买商品3.用户选择商品后,检查余额是否够,够就直接扣款,不够就提醒4.用户可一直购买商品,也可随时退出, ...

  9. Python3学习之路~2.2 简单的购物车程序

    程序:购物车程序 需求:启动程序后,让用户输入工资,然后打印商品列表允许用户根据商品编号购买商品用户选择商品后,检测余额是否够,够就直接扣款,不够就提醒 可随时退出,退出时,打印已购买商品和余额 代码 ...

随机推荐

  1. Linux上通过docker方式安装mysql

    centos版本信息: docker版本信息 mysql版本:5.7 1.docker方式安装 首先拉取mysql镜像:docker pull mysql:5.7     查看本地的mysql镜像 执 ...

  2. 北邮OJ 89. 统计时间间隔 java版

    89. 统计时间间隔 时间限制 1000 ms 内存限制 65536 KB 题目描述 给出两个时间(24小时制),求第一个时间至少要经过多久才能到达第二个时间.给出的时间一定满足的形式,其中x和y分别 ...

  3. 医学图像 | 使用深度学习实现乳腺癌分类(附python演练)

    乳腺癌是全球第二常见的女性癌症.2012年,它占所有新癌症病例的12%,占所有女性癌症病例的25%. 当乳腺细胞生长失控时,乳腺癌就开始了.这些细胞通常形成一个肿瘤,通常可以在x光片上直接看到或感觉到 ...

  4. SuperMap许可常见问题及解决办法

    一.试用许可申请可以直接在北京超图软件股份有限公司官网的“SuperMap 技术资源中心”申请试用许可,申请后您将获得:1.如果申请的是 SuperMap GIS 7C 系列产品的许可,您将获得 一个 ...

  5. NatApp 外网映射工具

    外网映射工具 在做微信开发或者是对接第三方支付接口时,回调接口可能需要外网访问,这时候开发者在本地测试的时候,需要用到外网测试工具.常用的外网测试工具有natapp.ngrok NatApp简介服务器 ...

  6. 史上最详细的Docker安装手册

    概述: 这个安装手册我已经使用了将近2年的时间,一直在进行完善(可以用于生产级别).使用了Centos 7系统. 一.Docker简单介绍 Docker是一个容器,使用的是Linux现有的技术,准确来 ...

  7. 谷歌 MapReduce 初探

    谷歌“三驾马车”的出现,才真正把我们带入了大数据时代,毕竟没有谷歌,就没有大数据. 上次的分享,我们对谷歌的其中一驾宝车 GFS 进行了管中窥豹,虽然只见得其中一斑,但是也能清楚的知道 GFS 能够把 ...

  8. java接口自动化(三) - 手工接口测试到自动化框架设计之鸟枪换炮

    1.简介 上一篇宏哥介绍完了接口用例设计,那么这一章节,宏哥就趁热打铁介绍一下,接口测试工具.然后小伙伴们或者童鞋们就可以用接口测试工具按照设计好的测试用例开始执行用例进行接口手动测试了.关于手动测试 ...

  9. postman 参数传递

    pm.test("Status code is 200", function () { pm.response.to.have.status(200); }); pm.test(& ...

  10. 使用css动画实现领积分效果

    最近项目中要做一个领积分的效果,根据老板的描述,这个效果类似于支付宝蚂蚁森林里的领取能量.整体效果是就是在树周围飘着几个积分元素,上下滑动,类似星星闪烁,点击领取后,沿着树中心的位置滑动并消失,树上的 ...