作业要求

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 购物车程序相关推荐

  1. 【python作业2回顾】——编写购物车程序、三级菜单程序

    第一部分:课堂小练习的思考总结 一.购物车程序 课程中要求所用时间:30分钟 实际自己所用时间:3个小时 这个练习所用时间严重超标,1.5小时用来做基本需求,1.5小时用来做优化了. 需求描述: 1. ...

  2. Python 基础 - Day 5 Assignment - ATM

    作业需求及初步思路   需求  思路  1 自定义信用卡额度 e.g 15000   见下数据存储模式  2  实现购物商城,买东西加入购物车,调用信用卡结构结账  改下购物车的扣款接口  3 可以提 ...

  3. Python 基础 - Day 1 Assignment - Login 模拟登陆

    作业要求: 1. 用户输入帐号密码进行登陆 2. 用户信息保存在文件内 3. 用户密码输入错误三次后锁定用户 知识点总结: 1. file的操作: with open 2. 读取file信息, 从st ...

  4. Python 基础 - Day 1 Assignment - Three tier menu 三级菜单

    作业要求 1. 运行程序输出第一级菜单 2. 选择一级菜单某项,输出二级菜单,同理输出三级菜单 3. 菜单数据保存在文件中 4. 让用户选择是否要退出 5. 有返回上一级菜单的功能 评分标准: 用多层 ...

  5. 【Python基础系列】每天一个小程序-01

    文章目录 题目 参考代码 代码分析 题目 第0000题 将你的 QQ 头像(或者微博/信头像)右上角加上红色的数字,类似于微信未读信息数量那种提示效果. 类似于图中效果. 参考代码 from PIL ...

  6. python购物代码_python简单的购物车程序(含代码)

    效果图: ''' Created on 2017年9月4日 @author: len ''' product_list = [ ('Robot',200000), ('MacPro',12000), ...

  7. Day2 - Python基础2作业【购物车程序】

    1 #/usr/bin/env python 2 #-*- coding:utf-8 -*- 3 # Day2/shopping_cart.py 4 5 _author_ = 'hepidong' 6 ...

  8. Python基础-小程序练习(跳出多层循环,购物车,多级菜单,用户登录)

    一. 从第3层循环直接跳出所有循环 break_flag = False count = 0 while break_flag == False:print("-第一层")whil ...

  9. 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, ...

最新文章

  1. python 变量聚类 proc varclus_使用SAS进行简单的聚类分析讲解
  2. docker 与tomcat整合
  3. ios6.x越狱将不会再呈现了
  4. 当前订单不支持只花呗支付是什么意思_1、(跑腿介绍篇)支付宝花呗分期线下推广...
  5. 计算机博士两篇一区两篇会议,本科博士联手!西电陈渤团队两篇论文被顶级会议录用...
  6. php iis ajax 无效,IIS7中Ajax.AjaxMethod无效的原因及解决方法
  7. php cli输出百分比,CLI模式。能不能修改已经输出的内容?
  8. 在Python中处理大型文件的最快方法
  9. 使C#代码现代化——第二部分:方法
  10. 基于JAVA+SpringMVC+Mybatis+MYSQL的电影购票系统
  11. 【ThinkPHP5.0RC2吃螃蟹之】关于ThinkPHP5.0的渲染模板输出
  12. 基于java的企业人事管理系统的设计与实现(含源文件)
  13. 列线图、nomogram到底是什么东西?如何实施?如何解读?
  14. python将网页转换为图片保存
  15. 重装windows10系统的教程
  16. 网站服务器1 mbps,网速1mbps是什么概念
  17. NCE4 L6 The sporting spirit
  18. 平面多边形凹凸判断(叉乘法)
  19. 道术结合,方可修炼成架构师
  20. JAVA计算机毕业设计腾讯网游辅助小助手(附源码、数据库)

热门文章

  1. undefined reference to 'pthread_create'问题解决(转)
  2. 【Leetcode】刷题之路3(python版)
  3. 《OpenCV3编程入门》学习笔记7 图像变换(四 )仿射变换
  4. usaco Healthy Holsteins
  5. ORB_SLAM2代码阅读(5)——Bundle Adjustment
  6. redis消息队列写入mysql_redis怎么实现将消息队列持久化到数据库中?
  7. php接入微信运动计步功能,运动计步,微信运动究竟靠不靠谱?
  8. html的子页面获取自己url,如何从html页面获取url参数并将其显示在textarea中?
  9. html中legend设置大小,HTML_如何给 legend 标签设定宽度,我们在做表单的时候经常会使 - phpStudy...
  10. 帝豪gs车机系统wince_吉利新款帝豪GS,内饰升级大双屏,还不涨价,7万多就能买...