User_Login_Register_Shopping 1.0
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @File : user_login_register_shopping.py
# @Author: Anthony.waa
# @Date : 2018/5/23 0023
# @Desc : # 用户登录状态
flag_user = False # 用户登录
def login():
'''
:param name: 用户名
:param passwd: 用户登录密码
:return: 实现三次登录成功
''' count = 1 login_name_passwd = {} with open('user_pwd.txt', 'r', encoding='utf-8')as f:
for line in f.readlines(): login_name = line.split(',')[0].strip()
login_pwd = int(line.rsplit(',')[-1].strip())
login_name_passwd[login_name] = login_pwd name = input('请输入用户名:').strip()
passwd = int(input('请输入密码:').strip())
while True:
if name in login_name_passwd and passwd == login_name_passwd.get(name):
flag_user = True
else:
flag_user = False if flag_user == True:
print('登录成功')
shopping()
else:
print('用户名或密码错误,请重新输入')
name = input('请输入用户名:').strip()
passwd = int(input('请输入密码:').strip())
count += 1 if count == 3:
print('用户名、密码输入错误超过3次,账户已锁定')
exit() # 用户注册
def register():
'''
:param name: 用户注册
:param passwd: 用户注册使用的密码
:return:
'''
flag_register = True
register_name_passwd = {}
with open('user_pwd.txt', 'r', encoding='utf-8')as f, open('user_pwd.txt', 'a', encoding='utf-8') as f1:
for line in f.readlines():
register_name = line.split(',')[0].strip()
register_passwd = line.split(',')[1].strip()
register_name_passwd[register_name] = register_passwd name = input('请输入注册用户名:').strip()
passwd = int(input('请输入注册密码:').strip()) while True:
if name in register_name_passwd:
flag_register = True # 该用户已经存在,请重新注册
else:
flag_register = False # 该用户不存在,注册成功 if flag_register == False:
f1.write(name), f1.write(','), f1.write(str(passwd)), f1.write('\n'),
f1.close()
print('用户注册成功')
print('请登录...')
break else:
print('用户已存在,请重新注册')
name = input('请输入用户名:').strip()
passwd = int(input('请输入密码:').strip()) # 购物车
def shopping():
'''
:return:返回商品清单
'''
# 原始购物清单
goods = [
{"name": "电脑", "price": 1999},
{"name": "鼠标", "price": 10},
{"name": "游艇", "price": 20},
{"name": "美女", "price": 998},
]
# 购物车
shopping_car = {}
# 购物车遍历
shopping_car_list = [] # 商品个数
good_count = 1 # 商品单价
shopping_price = {} # 输入不合法是打印
def return_error():
print("\033[1;31m 输入不合法,请重新输入 \033[0m") # 打印购物车商品和剩余金额
def end_shopping(): # 获取原始列表中的名称和价格
for list_goods_price in goods:
shopping_price[list_goods_price['name']] = list_goods_price['price']
with open('shopping_list.txt', 'w', encoding='utf-8') as shoppingf:
# 获取购物车中的名称和个数,并从中找到与原始列表中名称所对应的价格
for list_shopping_name, list_shopping_count in shopping_car.items():
shoppingf.writelines('商品名称:{0},商品个数:{1}个,商品价格:{2}元\n'.format(list_shopping_name, list_shopping_count,
shopping_price[list_shopping_name]))
# 格式化购物车商品名称和个数
for list_name in shopping_car:
print('\033[1;32m 商品名称:{0} 商品个数:{1} \033[0m'.format(list_name, shopping_car[list_name]))
print("\033[1;32m 剩余金额为:{0}\033[0m".format(all_money)) while True:
# 用户输入总资产
all_money = input("\033[1;32m 请输入总资产: \033[0m").strip()
if all_money.isdigit():
all_money = int(all_money)
# 显示购物商品列表
print('\033[1;32m ========== 商 品 清 单 ========== \033[0m'.center(20))
for good_index, good in enumerate(goods, 1):
print('\033[1;32m {0} {1} {2} \033[0m'.format(good_index, good['name'],
good['price']).center(20))
print('\033[1;32m 选择"q"退出 \033[0m'.center(20))
while True:
# 选择商品序号,或选择退出购物
choice_count = input("\033[1;32m 请输入商品序号: \033[0m").strip()
if choice_count.isdigit():
choice_count = int(choice_count)
# 商品序号小于商品列表长度
if choice_count > 0 and choice_count <= len(goods):
good_price = goods[choice_count - 1]['price']
# 用户资产大于商品价格,否则提示充值
if all_money > good_price:
good_name = goods[choice_count - 1]['name']
all_money -= good_price
# 商品是否存在购物车中
if good_name not in shopping_car:
shopping_car[good_name] = good_count
else:
for shopping_index, shopping_name in enumerate(shopping_car):
if shopping_name == good_name:
shopping_car[shopping_name] += 1 end_shopping() else:
print('\033[1;31m 余额不足,请充值: \033[0m'.center(17))
add_money = input("请输入总资产:").strip()
if add_money.isdigit():
add_money = int(add_money)
all_money += add_money
print('\033[1;32m 充值成功,剩余金额为: \033[0m'.center(17), all_money)
continue
elif choice_count.lower() == 'q':
print("\033[1;32m 购物结束,欢迎下次光临 \033[0m")
end_shopping()
exit()
return_error() # 主体函数
def main_menu():
# 打印选项菜单
print('{0}\n{1}\n{2}\n{3}'.format('选项菜单如下:', '1.注册', '2.登录', '3.购物车'))
while True:
choice = int(input('请输入菜单序号:').strip())
if choice == 1:
print('欢迎进入用户注册界面:')
register()
continue
elif choice == 2:
login()
elif choice == 3:
if flag_user == True:
login()
else:
print('请登录后,再试...')
else:
print('输入有误,请重新输入..') main_menu()
User_Login_Register_Shopping 1.0的更多相关文章
- User_Login_Register_Shopping+装饰器 3.0
#!/usr/bin/env python# -*- coding: utf-8 -*-# @Time : 2018/5/27 0027 14:07# @Author : Anthony.Waa# @ ...
- ZAM 3D 制作简单的3D字幕 流程(二)
原地址:http://www.cnblogs.com/yk250/p/5663907.html 文中表述仅为本人理解,若有偏差和错误请指正! 接着 ZAM 3D 制作简单的3D字幕 流程(一) .本篇 ...
- ZAM 3D 制作3D动画字幕 用于Xaml导出
原地址-> http://www.cnblogs.com/yk250/p/5662788.html 介绍:对经常使用Blend做动画的人来说,ZAM 3D 也很好上手,专业制作3D素材的XAML ...
- 微信小程序省市区选择器对接数据库
前言,小程序本身是带有地区选着器的(网站:https://mp.weixin.qq.com/debug/wxadoc/dev/component/picker.html),由于自己开发的程序的数据是很 ...
- osg编译日志
1>------ 已启动全部重新生成: 项目: ZERO_CHECK, 配置: Debug x64 ------1> Checking Build System1> CMake do ...
- 【AR实验室】OpenGL ES绘制相机(OpenGL ES 1.0版本)
0x00 - 前言 之前做一些移动端的AR应用以及目前看到的一些AR应用,基本上都是这样一个套路:手机背景显示现实场景,然后在该背景上进行图形学绘制.至于图形学绘制时,相机外参的解算使用的是V-SLA ...
- Elasticsearch 5.0 中term 查询和match 查询的认识
Elasticsearch 5.0 关于term query和match query的认识 一.基本情况 前言:term query和match query牵扯的东西比较多,例如分词器.mapping ...
- Swift3.0服务端开发(一) 完整示例概述及Perfect环境搭建与配置(服务端+iOS端)
本篇博客算是一个开头,接下来会持续更新使用Swift3.0开发服务端相关的博客.当然,我们使用目前使用Swift开发服务端较为成熟的框架Perfect来实现.Perfect框架是加拿大一个创业团队开发 ...
- vue2.0实践的一些细节
最近用vue2.0做了个活动.做完了回头发现,好像并没有太多的技术难点,而自己好像又做了比较久...只能说效率有待提升啊...简单总结了一些比较细节的点. 1.对于一些已知肯定会有数据的模块,先用一个 ...
随机推荐
- 在APP开发中,如何优雅的设计APP页面
1.明确页面设计在整个产品设计中的位置 互联网产品设计的流程大致是:产品定位——需求分析——信息架构设计——流程设计——页面框架设计——设计说明——输出设计文档.可以看到页面设计是处于整个流程的后期, ...
- 【Oracle】修改参数的同时添加注释
当修改参数时添加注释,我们会用到如下语句: alter system set parameter=value comment='description'; --修改参数需要有相应权限的用户去执行. 例 ...
- ubuntu安装-Caffe依赖
参考链接:http://my.oschina.net/u/939893/blog/163921 1. 安装numpy相对简单,以下命令可以完成 apt-get install python-numpy ...
- ML:流形学习
很多原理性的东西需要有基础性的理解,还是篇幅过少,所以讲解的不是特别的清晰. 原文链接:http://blog.sciencenet.cn/blog-722391-583413.html 流形(man ...
- 关于dlg和pro的问题
微软链接:http://technet.microsoft.com/zh-cn/subscriptions/bb983387.aspx CDialogEx::CDialogEx 构造 CDialogE ...
- getopt函数
getopt -- 解析命令的可选项 [说明]getopt只是一个简单的解析命令可选项的函数,只能进行简单的格式命令解析,格式如下: 1.形如:cmd [-a][-b] //对短选项的解析: ...
- 微信App支付:微信支付的appid,appsecret,商户号mch_id,微信交易支付密钥(mch_key)在哪里查看
1-1) 查看微信支付 appid 的方法 微信支付使用的 appid, 是微信服务号的 appid, 需要你登录微信服务号后台, 在 开发-基本配置/开发者ID(AppID) 中查看微信支付 app ...
- 06 Django组件-cookie与session
一.会话跟踪技术 1.什么是会话跟踪技术 我们需要先了解一下什么是会话!可以把会话理解为客户端与服务器之间的一次会晤,在一次会晤中可能会包含多次请求和响应.例如你给10086打个电话,你就是客户端,而 ...
- Python 安装 numpy 以及 matplotlib 的过程
系统:ubuntu 16.04 版本:Python3.5 步骤: 安装 pip sudo apt install python3-pip 查看 pip list 是否有 numpy 以及 matplo ...
- 基于Vue的事件响应式进度条组件
写在前面 找了很多Vue 进度条组件!,都不包含拖拽和点击事件,input range倒是原生包含input和change事件,但是直接基于input range做进度条的话,样式部分需要做大量调整和 ...