入门项目 A3 src 主代码
import json # 调度内置 json 模块,用于数列化输入输出,相比eval,功能更全面,融合度更高from conf import settings # 从配置文件configure (包) 中调用设置 setting (模块),用于使用setting中的名称空间from interface import user # 从接口文件interface (包) 中调用 user (模块) 里面的名称空间from lib import commonfrom interface import bankfrom interface import shop
user_info = {'name': None} # 定义确定登陆状态字典
# 注册def register(): # 定义注册功能函数 print('注册...') # 打印注册,提示用户 while True: # 启动循环 name = input('请输入用户名>>:').strip() # name接收用户输入注册用户名,input内置了输出流在此体现注释功能,strip方法去除多余空格
pwd = input('请输入密码>>:').strip() # pwd接收用户输入注册密码,input内置了输出流在此体现注释功能,strip方法去除多余空格
conf_pwd = input('请输入密码>>:').strip() # conf_pwd 用户再次输入密码,用于用户确认自己输入的密码,strip方法去除多余空格
if pwd == conf_pwd: # 逻辑判断:如果第二次输入的密码等于第一次输入的密码 flag, msg = user.register_interface(name, pwd) # 开头通过接口包导入了用户模块,在用户模块里面调用注册接口函数 # 通过res,与msg解压赋值 接收返回值 if flag: # 如果两个返回值为通过解压赋值得到的第一个是True print(msg) # 输出的msg解压赋值得到得是字符串‘注册成功’ break # 终止注册 else: # 如果两个返回值为通过解压赋值得到的第一个是False,也就是相对与True的其他情况,else print(msg) # 输出‘用户已存在'
# 登陆def login(): # 定义登陆功能函数 if user_info['name']: # 如果开头定义的user_info的K['name']有值,不为空,说明是已经登陆过的 return # 无返回值,直接退出登陆系统
while True: # 循环打印 name = input('请输入用户名>>:').strip() # 接收用户用户名 pwd = input('请输入密码>>:').strip() # 接收用户密码 flag, msg = user.login_interface(name, pwd) # flag,msg解压赋值接收(调用user内的登陆接口函数,传参执行,拿到返回值) if flag: # 如果flag = True user_info['name'] = name # 登陆成功,确定上线状态 print(msg) # 登陆成功 break # 退出当前循环 else: # 其他情况,就是False print(msg) # 密码错误
# 查看余额@common.authdef check_balance(): # 定义查看余额功能函数 msg = user.check_balance_interface(user_info['name']) print(msg)
# 提现@common.authdef withdraw(): # 定义提现功能函数 while True: # 循环开始 money = input('请输入体现金额:').strip() # 提示用户输入提现金额 if money.isdigit(): money = int(money) # 将输入的字符串转化为整型 flag, msg = bank.withdraw_interface(user_info['name'], money) # 执行bank模块里面的 withdraw_interface 提现接口函数功能 # 传入src开头的用户信息状态字典中的 'name' 的值,和用户输入的money整型钱数 # flag标识接收return的第一个返回值True/False # msg信息接收return的第二个返回值, # '用户:[%s] 提现 [%s¥]!' % (name, money) # '尊敬的用户,您的余额不足,请充值!' if flag: # flag标识接收return的第一个返回值True print(msg) # 打印,'用户:[%s] 提现 [%s¥]!' % (name, money) break # 退出循环
else: # 其他情况,也就是flag标识接收return的第一个返回值False print(msg) # 打印,'尊敬的用户,您的余额不足,请充值!' else: print('请输入数字!')
# 转账@common.authdef transfer(): # 定义转账功能函数 while True: # 开始循环 to_user = input('请输入转账目标用户:').strip() # 转账目标用户,输入目标账户名称 money = input('请输入转账金额:').strip() # 输入要转账的金额
money = int(money) # 将要转账的金额转换为整型 flag, msg = bank.transfer_interface(user_info['name'], to_user, money) # flag,msg解压赋值接收 bank模块下面的转账接口函数 # (三个传值,登陆状态下的来源用户name作为K对应的值,目标用户的name,和要转账的金额的整型) if flag: # 如果 flag 接收的函数返回值是 # return False,'目标用户不存在!' # return True,'转账成功,用户[%s]转账给用户[%s] %s $!'(只会执行if True,或者if not False) # return False,'尊敬的用户,您的余额不足,请充值!'
print(msg) # 打印'转账成功,用户[%s]转账给用户[%s] %s $!' break # 退出转账循环 else: # 其他情况 # return False,'目标用户不存在!' # return False,'尊敬的用户,您的余额不足,请充值!' print(msg) # 输出'目标用户不存在!' # 输出'尊敬的用户,您的余额不足,请充值!'
# 还款@common.authdef repay(): # 定义还款功能函数 while True: # 开始循环 money = input('请输入还款金额:').strip() # 接收用户输入的还款金额 money = int(money) # 将用户输入的金额转换成整型,后续作运算 msg = bank.repay_interface(user_info['name'], money) # msg接收bank模块 下面的还款接口功能函数 传入(用户登陆状态信息内的name作为K的值,传入的还款金额整型) print(msg) # 打印返回值 '还款[%s]成功!'% money break # 退出循环
# 查看流水@common.authdef check_flow(): # 定义查看流水账单功能函数 flow_s = bank.check_flow_interface(user_info['name']) for line in flow_s: print(line)
# 购物车功能@common.authdef shopping(): # 定义购物花钱赚钱功能函数 goods_list = [ ['凤爪', 50], ['T-shirt', 150], ['macbook', 21800], ['iphoneX', 7000] ]
# 购物车 shopping_cart = {}
# 购物总额 cost = 0
# 获取用户余额 user_balance = bank.check_balance_interface(user_info['name'])
while True: for index, goods in enumerate(goods_list): # enumerate枚举对象(取出内容信息,并加索引,索引默认值为1) # index 接收索引,goods 接收商品信息 print(index, goods) # 挨个打印出来
choice = input('请选择商品编号:').strip() # 提示用户输入商品编号
if choice.isdigit(): # 如果用户输入的内容全是数字(isdigit()返回bool值,在此返回True才会执行内部代码) choice = int(choice) # 将用户输入的choice字符串类型 转换为 int 整型类型,以方便后续做数字的比较运算
if choice >= 0 and choice < len(goods_list): # 如果用户输入的数字大于等于0,此时0代表的商品是['凤爪', 50] # 并且,用户输入的 小于商品列表的总索引数,此时总索引为 4
good_name, good_price = goods_list[choice] # goods_list[choice] ,假设输入的choice为1,goods_list[choice] == goods_list[1] == ['T-shirt', 150] # 通过解压赋值 # good_name,拿到的是商品名称 'T-shirt' # good_price,拿到的是商品价格 150
if user_balance >= good_price: # 如果用户余额,大于等于,商品价格
if good_name in shopping_cart: # 如果商品名在购物车中 shopping_cart[good_name] += 1 # 以商品名作为K,商品名的数量+1 else: # 如果不在 shopping_cart[good_name] = 1 # 加进去商品名,并设定初始值为1
cost += good_price # 每添加到购物车一次商品,购物总额加上每一次添加的商品金额 再赋值给 购物总额
flag, msg = shop.add_shopping_cart_interface(user_info['name'], shopping_cart) # flag,msg 解压赋值接收 函数的返回值 True,'添加购物车成功!' if flag: # 如果接收了True: print(msg) # 输出msg通过解压赋值所得到的包含的信息 ‘添加购物车成功!’ print(shopping_cart) # 输出 目前的购物车列表 else: print('余额不足,请充值')
elif choice == 'q': # 如果输入的其他情况是q if cost == 0: break # 如果 商品总额为0,说明没有添加商品,没有产生价格变动,退出当前循环
confirm = input('确认购买输入 y,取消输入 n').strip() # 确认= 接收用户的输入信息,确认购买输入y,取消购买输入n
if confirm == 'y': # 如果输入的是y flag, msg = bank.pay_interface(user_info['name'], cost) # flag,msg通过解压赋值拿到 bank模块下面 付款接口功能 函数的返回值 # 返回给外界 True,'支付成功!' 或 # 返回给外界 False,'消费失败!'
if flag: # 如果 接收了True,继续执行下面代码 print(msg) # 输出'支付成功!' break # 退出循环
else: # 其他情况 (接收了False) print(msg) # 输出'消费失败!'
else: # 如果输入的不是y, print('退出购买!') # 输出'退出购买!' break # 退出循环
else: # 请选择商品编号时的输入有误,非本系统识别或存储类型 print('输入有误!') # 输出提示 '输入有误!',继续循环
# 查看购物车@common.authdef check_shop(): # 定义查看购物车功能函数 shopping_cart = shop.show_shopping_cart_interface(user_info['name']) # 调用显示购物车的接口,拿到返回值用户信息字典 中的 购物车作为K对应的值
if shopping_cart: # 如果用户信息字典 中的 购物车作为K对应的值 有数据,执行后续代码 print(shopping_cart) # 输出购物车中的数据
else: # 用户信息中的购物车的K没有对应的值,为None的情况下 print('购物车已被清空') # 输出'购物车已被清空'
# 注销用户@common.authdef logout(): msg = user.logout_interface() print(msg)
func_dic = { '1': register, '2': login, '3': check_balance, '4': withdraw, '5': transfer, '6': repay, '7': check_flow, '8': shopping, '9': check_shop, '0': logout,} # 定义函数功能字典,用于用户输入键位后,提取对应的K的值V,加括号运行对应函数功能
# 主程序def run(): # 运行,整个购物车的入口 while True: # 循环开始 print(''' 1.注册 2.登陆 3.查看余额 4.提现 5.转账 6.还款 7.查看流水 8.购物车 9.查看购物车 0.注销用户 q.退出 ''') # 显示提示用户输入所需功能,根据序号输入 choice = input('请选择功能编号>>:').strip() # 接收用户输入的信息,提示输入功能编号,并去空
quit = ['q', 'Q', 'quit'] # 定义一个退出列表,包含三种可能输入的退出情况 if choice in quit: # 逻辑判断,如果用户所输入的内容在退出字典中 break # 上诉条件成立退出当前循环即整个系统
# 判断用户选择的编号是否在1-9功能内 if choice in func_dic: # 如果输入内容在函数功能字典中 func_dic[choice]()
# 查找对应的数字K在字典中对应的值,提取值就是提前一个未运行的函数名,# 后面追加括号,执行该函数功能
else: # 否则,意思就是其他情况,不在1到9的范围内和退出列表中的输入信息,就是不符合输入规范 print('请输入正确的编号!') # 字面
入门项目 A3 src 主代码的更多相关文章
- 入门项目 A1 start
''' 启动文件入口 ''' from core import src import os import sys # 拿到项目的路径 path = os.path.dirname(__file__) ...
- Spark+ECLIPSE+JAVA+MAVEN windows开发环境搭建及入门实例【附详细代码】
http://blog.csdn.net/xiefu5hh/article/details/51707529 Spark+ECLIPSE+JAVA+MAVEN windows开发环境搭建及入门实例[附 ...
- mvn编写主代码与测试代码
maven编写主代码与测试代码 3.2 编写主代码 项目主代码和测试代码不同,项目的主代码会被打包到最终的构件中(比如jar),而测试代码只在运行测试时用到,不会被打包.默认情况下,Maven假设项目 ...
- maven编写主代码与测试代码
3.2 编写主代码 项目主代码和测试代码不同,项目的主代码会被打包到最终的构件中(比如jar),而测试代码只在运行测试时用到,不会被打包.默认情况下,Maven假设项目主代码位于src/main/ja ...
- 【CuteJavaScript】Angular6入门项目(1.构建项目和创建路由)
本文目录 一.项目起步 二.编写路由组件 三.编写页面组件 1.编写单一组件 2.模拟数据 3.编写主从组件 四.编写服务 1.为什么需要服务 2.编写服务 五.引入RxJS 1.关于RxJS 2.引 ...
- SpringCloud学习之手把手教你用IDEA搭建入门项目(一)
SpringCloud简单搭建 jdk:1.8开发工具:IDEA注:需要了解springcloud 1.创建最简单的Maven项目 1)开始创建一个新的项目 2)创建一个空模板的maven项目,用 ...
- mnist手写数字识别——深度学习入门项目(tensorflow+keras+Sequential模型)
前言 今天记录一下深度学习的另外一个入门项目——<mnist数据集手写数字识别>,这是一个入门必备的学习案例,主要使用了tensorflow下的keras网络结构的Sequential模型 ...
- 基于renren-fast的快速入门项目实战(实现报表增删改查)
基于renren-fast的快速入门项目实战(实现报表增删改查) 说明:renren-fast是一个开源的基于springboot的前后端分离手脚架,当前版本是3.0 官方开发文档需付费,对于新手而言 ...
- 解决 IDEA 创建 Gradle 项目没有src目录问题
解决 IDEA 创建 Gradle 项目没有src目录问题 前几天遇到一个问题,就是使用IDEA创建gradle项目后,src目录没有自动生成出来,今天就给大家分享一下怎么解决. 1. 目录:创建的 ...
随机推荐
- Twisted简介
Twisted是用Python实现的基于事件驱动的网络引擎框架,Twisted支持许多常见的传输及应用层协议,包括TCP.UDP.SSL/TLS.HTTP.IMAP.SSH.IRC以及FTP.就像Py ...
- npm 清理缓存
npm cache clean -f 有些时候npm下载资源出错,再次下载的时候可能因为之前错误的缓存造成一直下载不成功. 此时可以清一下npm的缓存,然后尝试重新下载
- Android中intent的分类及使用
intent分为隐式和显式,显式的浅显易懂就是直呼其名,可用intent类的一个构造函数,直接传入context和想要打开的活动的名称.还可以用setcomponent方法来确定要打开的活动的名称.而 ...
- server time zone
问题原因 由于使用的Mysql数据库驱动版本太高,存在数据库和系统时区差异,所以出问题. 问题解决 Spring Boot配置文件中在url: jdbc:mysql://127.0.0.1:3306/ ...
- Docker Doc之一:小白入门
Docker与虚拟机相比有更大的优势,而且微软巨硬全力支持Docker,这个不得不让大家关心一下Docker的3W. Docker是什么 2013 年初,PaaS 提供商 dotCloud 开源了一个 ...
- Intellj IDEA光标问题
Intellj IDEA光标为insert状态,无法删除内容以前用得是社区版的IDEA,今天装了14版本的,结果导入项目后,发现打开java文件的光标是win系统下按了insert键后的那种宽的光标, ...
- 【HNOI 2018】排列
Problem Description 给定 \(n\) 个整数 \(a_1, a_2, \ldots , a_n(0 \le a_i \le n)\),以及 \(n\) 个整数 \(w_1, w_2 ...
- ABAP search help (搜索帮助) 几种种方法
ABAP search help (搜索帮助) 几种种方法 域范围 ABAP 的搜索帮助有很多种方法,掌握下面的几种基本差不多了 *&------------------------- ...
- LINQ之路15:LINQ Operators之元素运算符、集合方法、量词方法
本篇继续LINQ Operators的介绍,包括元素运算符/Element Operators.集合方法/Aggregation.量词/Quantifiers Methods.元素运算符从一个sequ ...
- pixi.js(入门)
1.关于 一个关于HTML5 2D渲染引擎,它的独特之处在于其拥有了canvas回调功能的WebGL,速度快,能够兼容所有设备,简单得说也就是跨平台了,我用的开发工具是WebStorm 2.参考API ...