Python 基础 - Day 2 Assignment - ShoppingCart 购物车程序
作业要求
1、启动程序后,输入用户名密码后,如果是第一次登录,让用户输入工资,然后打印商品列表
2、允许用户根据商品编号购买商品
3、用户选择商品后,检测余额是否够,够就直接扣款,不够就提醒
4、可随时退出,退出时,打印已购买商品和余额
5、在用户使用过程中, 关键输出,如余额,商品已加入购物车等消息,需高亮显示
6、用户下一次登录后,输入用户名密码,直接回到上次的状态,即上次消费的余额什么的还是那些,再次登录可继续购买
7、允许查询之前的消费记录
知识点解析
- 函数式编程的逻辑和过程: 将项目的要求步骤化,并赋予不同的函数名。主程序调用这些函数。
def init(): # 系统初始化(读取所有商品并保存为全局变量)return Truedef login(): # 登录认证passdef register(): # 新用户注册,第一次登录,输入salarypassdef show_products(): # 展示所有商品的序号/名称/单价passdef user_choice(): # 让用户输入选择的商品序号或者'q', 'q'返回就调用shwo_current_shopping_logpassdef show_current_shopping_log(): # 显示本次购物日志passdef balance_enough(): # 检验余额是否足够passdef add_cart(): # 放入购物车,高亮显示,扣费。并调用日志信息shopping_log()和 show_user_balance()passdef shopping_log(): # 添加到本次消费日志和用户信息的日志中passdef save_user(): # 将用户信息存入文件中去passdef show_user_balance(): # 显示当前用户的历史购物日志passdef show_shopping_log(): # 显示用户所有历史的消费记录pass
View Code
- 函数的返回值 return True: 用来检验函数执行是否成功
- 函数嵌套函数:常用于装饰器。我们知道,函数内定义的变量是局部变量。但是,如果函数内有函数,函数参数值在函数内的有效的。
- 尽量详细的拆分
- 调用文件全路径的方法: - OS 模块见笔记: http://www.cnblogs.com/lg100lg100/p/7158222.html
import osBASE_DIR = os.path.dirname(__file__) DB_DIR = os.path.join(BASE_DIR,'db') # print(BASE_DIR) # print(DB_DIR) os.path.exist()
- JSON 模块见笔记: http://www.cnblogs.com/lg100lg100/p/7160951.html
- 作业中出现的错误:字段名的命名还是用英语比较好,中文出现错别字,就无法执行程序。
作业代码:
#!usr/bin/env python # -*- coding:utf-8 -*- # Author: Jane Yueimport sys import jsonopen_line = '''有机生鲜 多*快*好*省 ---------------------------------- a键: 新用户注册 b键:登陆账户 q键:退出 ---------------------------------- '''user_menu = ['退出', '购物', '充值', '查询']def save_into_file(db_dict, filename='user_data.json'):# 辅助函数:将信息存入文件,默认文件为 user_status.jsonwith open(filename, "w", encoding="utf-8") as f:json.dump(db_dict, f)def load_from_file(filename='user_data.json'):# 辅助函数:读取文件信息,默认文件为 user_status.jsonwith open(filename, 'r', encoding="utf-8") as f:db_dict = json.load(f)return db_dictdef openline():# 程序开始while True:print(open_line)open_choice = input('请根据菜单选择:').strip()if open_choice == "a":username = input("用户名:")register(username)elif open_choice == "b":login()elif open_choice == "q":sys.exit()else:print("错误信息,重新输入")continuedef login():# 登录认证db_dict = load_from_file() # python字典格式:{"username":{"密码": "password","历史记录":["商品"], "余额": 000}}count = 0while count < 3:username = input('用户名: ')if username in db_dict:password = input('密码: ')if password == db_dict[username]["密码"]:print("小主,欢迎回来买买买!")core_menu(username)else:count += 1print("密码错误,您还有%d机会。" % (3 - count))continueelse:print("用户名不存在,请注册新账户")register(username)return Truedef register(username):# 注册新账户并存入文件db_dict = load_from_file()while True:print("用户名:%s" % username)password = input("密码:")if len(password.strip()) > 0:db_dict[username] = {"密码": "password","历史纪录": ["商品"],"余额": 000}ini_balance = int(input("首次充值额:"))db_dict[username]["余额"] = ini_balancesave_into_file(db_dict)print("欢迎第一次登陆,%s" % username)core_menu(username)else:print("请输入密码")continuedef core_menu(username):# 用户登陆后,显示选项及菜单print('用户菜单'.center(25, "="))for i in user_menu:print(user_menu.index(i), i)while True:choice = input('亲,请选择 >>> ')if choice == "1":shopping(username)elif choice == "2":topup(username)elif choice == "3":show_user_balance(username)elif choice == "q":print('88,亲')sys.exit()else:print('错误信息,请重新选择')continuedef shopping(username):# 购物menu_dict = load_from_file("menu.json")db_dict = load_from_file()while True:for i in sorted(menu_dict):print(i)option1 = input('请选择\033[001m产品分类\033[0m 【b】返回 【任意键】退出').strip() # 001加粗if option1 in menu_dict:print('{}清单如下:'.format(option1).rjust(25, '-'))for k in menu_dict[option1]:print(k, menu_dict[option1][k])while True:option2 = input('请选择 \033[001m商品\033[0m 加入购物车【b】返回 【q键】退出 ').strip()if option2 in menu_dict[option1]:option3_num = input('请输入购买数量').strip()if option3_num.isdigit() and int(option3_num) <= menu_dict[option1][option2]['数量']:num = int(option3_num)price = menu_dict[option1][option2]['单价']cost = num*pricebalance = db_dict[username]['余额']if cost<=balance:db_dict[username]['余额'] -= costdb_dict[username]['历史记录'].append(option2) # 添加字典value值数据??? save_into_file(db_dict)menu_dict[option1][option2]['数量'] -= numsave_into_file(menu_dict, "menu.json")print("商品已购,您的最新余额为\033[34m%d\033[0m" % (db_dict[username]['余额']))breakelse:print('账户余额不足,请充值')core_menu(username)else:print("抱歉,商品数目不足")continueelif option2 == 'b':breakelif option2 == 'q':sys.exit()else:print('错误信息,请重新选择')continueelif option1 == 'b':core_menu(username)else:sys.exit()def topup(username):# 充值db_dict = load_from_file()top_up = input('请填写充值金额')if top_up.isdigit():db_dict[username]["余额"] += int(top_up)save_into_file(db_dict)show_user_balance(username)else:print('错误信息,请重新选择')core_menu(username)def show_user_balance(username):# 显示用户余额db_dict = load_from_file()print('{},您的当前余额为\033[34m{}\033[0m'.format(username,db_dict[username]['余额']))show_shopping_log(username)def show_shopping_log(username):# 显示用户所有历史的消费记录db_dict = load_from_file()shopping_log = db_dict[username]['历史记录']if shopping_log == '':print("您在本小店没有消费记录")core_menu(username)else:print('历史消费如下:',shopping_log)choice = input('【b键】返回主菜单 【q键】退出')if choice == 'q':sys.exit()else:core_menu(username)if __name__ == '__main__':openline()
View Code
转载于:https://www.cnblogs.com/lg100lg100/p/7123722.html
Python 基础 - Day 2 Assignment - ShoppingCart 购物车程序相关推荐
- 【python作业2回顾】——编写购物车程序、三级菜单程序
第一部分:课堂小练习的思考总结 一.购物车程序 课程中要求所用时间:30分钟 实际自己所用时间:3个小时 这个练习所用时间严重超标,1.5小时用来做基本需求,1.5小时用来做优化了. 需求描述: 1. ...
- Python 基础 - Day 5 Assignment - ATM
作业需求及初步思路 需求 思路 1 自定义信用卡额度 e.g 15000 见下数据存储模式 2 实现购物商城,买东西加入购物车,调用信用卡结构结账 改下购物车的扣款接口 3 可以提 ...
- Python 基础 - Day 1 Assignment - Login 模拟登陆
作业要求: 1. 用户输入帐号密码进行登陆 2. 用户信息保存在文件内 3. 用户密码输入错误三次后锁定用户 知识点总结: 1. file的操作: with open 2. 读取file信息, 从st ...
- Python 基础 - Day 1 Assignment - Three tier menu 三级菜单
作业要求 1. 运行程序输出第一级菜单 2. 选择一级菜单某项,输出二级菜单,同理输出三级菜单 3. 菜单数据保存在文件中 4. 让用户选择是否要退出 5. 有返回上一级菜单的功能 评分标准: 用多层 ...
- 【Python基础系列】每天一个小程序-01
文章目录 题目 参考代码 代码分析 题目 第0000题 将你的 QQ 头像(或者微博/信头像)右上角加上红色的数字,类似于微信未读信息数量那种提示效果. 类似于图中效果. 参考代码 from PIL ...
- python购物代码_python简单的购物车程序(含代码)
效果图: ''' Created on 2017年9月4日 @author: len ''' product_list = [ ('Robot',200000), ('MacPro',12000), ...
- Day2 - Python基础2作业【购物车程序】
1 #/usr/bin/env python 2 #-*- coding:utf-8 -*- 3 # Day2/shopping_cart.py 4 5 _author_ = 'hepidong' 6 ...
- Python基础-小程序练习(跳出多层循环,购物车,多级菜单,用户登录)
一. 从第3层循环直接跳出所有循环 break_flag = False count = 0 while break_flag == False:print("-第一层")whil ...
- python基础代码事例-Python简单基础小程序的实例代码
1 九九乘法表 for i in range(9):#从0循环到8 i += 1#等价于 i = i+1 for j in range(i):#从0循环到i j += 1 print(j,'*',i, ...
最新文章
- python 变量聚类 proc varclus_使用SAS进行简单的聚类分析讲解
- docker 与tomcat整合
- ios6.x越狱将不会再呈现了
- 当前订单不支持只花呗支付是什么意思_1、(跑腿介绍篇)支付宝花呗分期线下推广...
- 计算机博士两篇一区两篇会议,本科博士联手!西电陈渤团队两篇论文被顶级会议录用...
- php iis ajax 无效,IIS7中Ajax.AjaxMethod无效的原因及解决方法
- php cli输出百分比,CLI模式。能不能修改已经输出的内容?
- 在Python中处理大型文件的最快方法
- 使C#代码现代化——第二部分:方法
- 基于JAVA+SpringMVC+Mybatis+MYSQL的电影购票系统
- 【ThinkPHP5.0RC2吃螃蟹之】关于ThinkPHP5.0的渲染模板输出
- 基于java的企业人事管理系统的设计与实现(含源文件)
- 列线图、nomogram到底是什么东西?如何实施?如何解读?
- python将网页转换为图片保存
- 重装windows10系统的教程
- 网站服务器1 mbps,网速1mbps是什么概念
- NCE4 L6 The sporting spirit
- 平面多边形凹凸判断(叉乘法)
- 道术结合,方可修炼成架构师
- JAVA计算机毕业设计腾讯网游辅助小助手(附源码、数据库)
热门文章
- undefined reference to 'pthread_create'问题解决(转)
- 【Leetcode】刷题之路3(python版)
- 《OpenCV3编程入门》学习笔记7 图像变换(四 )仿射变换
- usaco Healthy Holsteins
- ORB_SLAM2代码阅读(5)——Bundle Adjustment
- redis消息队列写入mysql_redis怎么实现将消息队列持久化到数据库中?
- php接入微信运动计步功能,运动计步,微信运动究竟靠不靠谱?
- html的子页面获取自己url,如何从html页面获取url参数并将其显示在textarea中?
- html中legend设置大小,HTML_如何给 legend 标签设定宽度,我们在做表单的时候经常会使 - phpStudy...
- 帝豪gs车机系统wince_吉利新款帝豪GS,内饰升级大双屏,还不涨价,7万多就能买...