python作业购物车(第二周)
一.作业需求:
1、启动程序后,输入用户名密码后,如果是第一次登录,让用户输入工资,然后打印商品列表
2、允许用户根据商品编号购买商品
3、用户选择商品后,检测余额是否够,够就直接扣款,不够就提醒
4、可随时退出,退出时,打印已购买商品和余额
5、在用户使用过程中, 关键输出,如余额,商品已加入购物车等消息,需高亮显示
6、用户下一次登录后,输入用户名密码,直接回到上次的状态,即上次消费的余额什么的还是那些,再次登录可继续购买
7、允许查询之前的消费记录
二.思路
1.涉及的内容有文件操作,还有字典、列表、元组、等操作
2.将用户,密码,商城余额,购物商品,商品数量存成字典,保存数据,写入模块可以使用json,pickle
3.可以将用户,密码,余额写在一个文件,将另一个文件存该用户的购物车列表,也可以写在一起(我这里写在了一起)
4.将商品写成列表中的元组,例如: P_list = [('Iphone','5700')]
5.商城余额减去商品价格做判断,用文件操作字典,不够可以充值并修改字典文件的value值
6.将购物的商品列表最后写入到文件的字典中,方便下次查询使用例如:user_list[user]['salary']
三.流程图
待更新:
四.初始化用户信息代码:
- user_list = {
- 'test1': {
- 'username': 'test000',
- 'userpasswd': '',
- 'salary': '',
- 'shop_car': '',
- 'shop_car_list': ''
- }
- }
- f = open('shopping_db', 'wb')
- pickle.dump(user_list, f)
- f.close()
五.购物车代码
- f = open('shopping_db', 'rb') #读取字典操作
- user_list = pickle.load(f)
- f.close()
- def wirte_logout(): #写入字典操作
- f = open('shopping_db', 'wb')
- pickle.dump(user_list, f)
- f.close()
- return
- goods_list = [ #商品列表
- ('IPone', 5800),
- ('Mac Pro', 12000),
- ('MI盒子', 199),
- ('LG显示器23.6', 849)
- ]
- def index_page():
- page = '''
- [0]老用户登录 [1]新用户登陆 [2]浏览商品
- '''
- welcome = ( '''\033[32;1m欢迎登陆购物车作业系统\033[0m''')
- print(welcome,'\n',page)
- return
- def login():
- print('\n')
- global user
- count = 0
- while True:
- if count < 3:
- user = input('用户名: ')
- password = input('密 码: ')
- if user in user_list.keys():
- if user == user_list[user]['username'] and password == user_list[user]['userpasswd']:
- print('\n''欢迎登录!你的余额是:\033[32;1m %s\033[0m' % user_list[user]['salary'],'\n')
- break
- else:
- print('用户名或密码不正确,请重新登录!')
- else:
- user_choice = input('您不是老用户,是新用户的话按y写入系统按n重新登陆:(y/n)')
- if user_choice == 'y':
- add_user()
- break
- elif user_choice == 'n':
- pass
- count += 1
- else:
- sys.exit('超出登录次数!登录失败')
- return
- def add_user():
- global user
- exit_flag = False
- print('\n')
- while not exit_flag:
- username = input('请输入你的用户名:')
- if username in user_list.keys():
- print('\n用户名已存在,请输入其他名称\n')
- else:
- exit_flag = True
- userpasswd = input('请输入你的密码')
- user_list[username] = {}
- user_list[username]['username'] = username
- user_list[username]['userpasswd'] = userpasswd
- user_list[username]['salary'] = ''
- user_list[username]['shop_car'] = ''
- user_list[username]['shop_car_list'] = ''
- print('\n %s,欢迎首次登陆请选购商品' % username, '\n')
- user = user_list[username]['username']
- return
- def print_product_list():
- print('\n产品列表:\n')
- for item in enumerate(goods_list):
- index = item[0]
- p_name = item[1][0]
- p_price = item[1][1]
- print(index, ':', p_name, p_price)
- return
- def printending():
- print('之前购买的商品'.center(50, '-'))
- for item in user_list[user]['shop_car']:
- a = user_list[user]['shop_car'].index(item)
- print('\033[32;1m 商品:%s 价格:%s 数量:%s \033[0m' % (
- user_list[user]['shop_car'][a][0], user_list[user]['shop_car'][a][1], user_list[user]['shop_car_list'][a]))
- print('End'.center(58, '-'))
- print('\033[32;1m 余额是:%s\033[0m' % user_list[user]['salary'])
- print('End'.center(58,'-'),'\n')
- return
- exit_flag = False
- while not exit_flag:
- index_page()
- index_user_choice = input('请输入您要进行的操作:')
- if index_user_choice == '':
- login()
- exit_flag = True
- elif index_user_choice == '':
- add_user()
- exit_flag = True
- elif index_user_choice == '':
- print_product_list()
- else:
- print('输入操作无效!')
- print('Begin The Shopping'.center(80, '-'), '\n')
- exit_flag2 = False
- while not exit_flag2:
- if not user_list[user]['salary']:
- salary = input('你的余额为0,请输入金额: ')
- if salary.isdigit():
- salary = int(salary)
- user_list[user]['salary'] = salary
- else:
- print('数据类型不正确,请输入一个正确的数字!')
- continue
- else:
- salary = user_list[user]['salary']
- if not user_list[user]['shop_car']:
- shop_car = []
- shop_car_list = []
- else:
- shop_car = user_list[user]['shop_car']
- shop_car_list = user_list[user]['shop_car_list']
- print_product_list()
- print('''
- [q=quit,c=check,l=logout,r=rechage]
- ''')
- user_choice = input('请问你想购买什么?')
- print (shop_car)
- if user_choice.isdigit():
- user_choice = int(user_choice)
- if user_choice < len(goods_list):
- p_item = goods_list[user_choice]
- if p_item[1] <= salary:
- if p_item not in shop_car:
- shop_car.append(p_item)
- shop_car_list.append(1)
- user_list[user]['shop_car'] = shop_car
- user_list[user]['shop_car_list'] = shop_car_list
- salary -= p_item[1]
- user_list[user]['salary'] = salary
- print('\033[32;1m 添加了:%s,价格是:%s,余额:%s\033[0m' % (p_item[0], p_item[1], user_list[user]['salary']), '\n')
- else:
- item_num = shop_car_list[shop_car.index(p_item)] + 1
- shop_car_list[shop_car.index(p_item)] = item_num
- user_list[user]['shop_car_list'] = shop_car_list
- salary -= p_item[1]
- user_list[user]['salary'] = salary
- print('\033[32;1m 在购物车上添加了:%s,价格是:%s,你的余额是:%s\033[0m' % (p_item[0], p_item[1], user_list[user]['salary']), '\n')
- else:
- print('\033[32;1m你的余额是: %s,余额不足购买!\033[0m' % user_list[user]['salary'], '\n')
- else:
- print('你选择的商品不存在!', '\n')
- else:
- if user_choice == 'q' or user_choice == 'quit':
- printending()
- print('Bye %s' % user)
- wirte_logout()
- exit_flag2 = True
- elif user_choice == 'c' or user_choice == 'check':
- printending()
- elif user_choice == 'l' or user_choice == 'logout':
- printending()
- login()
- elif user_choice == 'r' or user_choice == 'rechage':
- salary_change = input('请输入充值金额:')
- if salary_change.isdigit():
- salary_change = int(salary_change)
- salary += salary_change
- user_list[user]['salary'] = salary
- else:
- print('数据类型不正确,请输入一个正确的数字!')
- continue
- else:
- print('请输入合法字符!', '\n')
python作业购物车(第二周)的更多相关文章
- python学习笔记第二周
目录 一.基础概念 1.模块 1)os模块 2)sys模块 2.pyc文件 3.数据类型 1)数字 2)布尔值 3)字符串 4.数据运算 5.运算符 6.赋值运算 7.逻辑运算 8.成员运算 9.身份 ...
- 【吴恩达课后编程作业】第二周作业 - Logistic回归-识别猫的图片
1.问题描述 有209张图片作为训练集,50张图片作为测试集,图片中有的是猫的图片,有的不是.每张图片的像素大小为64*64 吴恩达并没有把原始的图片提供给我们 而是把这两个图片集转换成两个.h5文件 ...
- python刷题第二周
1: 第3章-5 字符转换 (15 分) 本题要求提取一个字符串中的所有数字字符('0'--'9'),将其转换为一个整数输出. 输入格式: 输入在一行中给出一个不超过80个字符且以回车结束的字符串. ...
- python作业ATM(第五周)
作业需求: 额度 15000或自定义. 实现购物商城,买东西加入 购物车,调用信用卡接口结账. 可以提现,手续费5%. 支持多账户登录. 支持账户间转账. 记录每月日常消费流水. 提供还款接口. AT ...
- Python学习之旅--第二周--元组、字符串、运算、字典
一.元组 另一种有序列表叫元组:tuple.tuple和list非常类似,但是tuple一旦初始化就不能修改,比如同样是列出同学的名字: # Author:Tim Gu tuple = (" ...
- python课程第二周重点记录
python课程第二周重点记录 1.元组的元素不可被修改,元组的元素的元素可以被修改(字典在元组中,字典的值可以被修改) 2.个人感觉方便做加密解密 3.一些方法的使用 sb = "name ...
- 20169212《Linux内核原理与分析》第二周作业
<Linux内核原理与分析>第二周作业 这一周学习了MOOCLinux内核分析的第一讲,计算机是如何工作的?由于本科对相关知识的不熟悉,所以感觉有的知识理解起来了有一定的难度,不过多查查资 ...
- 20169210《Linux内核原理与分析》第二周作业
<Linux内核原理与分析>第二周作业 本周作业分为两部分:第一部分为观看学习视频并完成实验楼实验一:第二部分为看<Linux内核设计与实现>1.2.18章并安装配置内核. 第 ...
- 2017-2018-1 Java演绎法 第二周 作业
团队任务:讨论Android上的游戏软件 参考现代软件工程 第一章 [概论]练习与讨论: 软件有很多种,也有各种分类办法,本次团队任务是讨论选取Android上的一个游戏软件,考虑到每位组员接触的游戏 ...
随机推荐
- Java List部分截取,获得指定长度子集合
subList方法用于获取列表中指定范围的子列表,该列表支持原列表所支持的所有可选操作.返回列表中指定范围的子列表. 语法 subList(int fromIndex, int toIndex) fr ...
- angular 延迟更新方法
失去焦点后更新: <input ng-model="name" ng-model-options="{updateOn:'blur'}" />{{n ...
- HDU——1788 Chinese remainder theorem again
再来一发水体,是为了照应上一发水题. 再次也特别说明一下,白书上的中国剩余定理的模板不靠谱. 老子刚刚用柏树上的模板交上去,简直wa出翔啊. 下面隆重推荐安叔版同余方程组的求解方法. 反正这个版本十分 ...
- 如果使用引用方式引用了js后 则不能再本地写js 因为写了后不会有效果
如果使用引用方式引用了js后 则不能再本地写js 因为写了后不会有效果
- JAVA里面"=="和euqals的区别
(1)基本数据类型,用双等号“==”比较,比较的是他们的值,值类型是存储在内存中的栈中 (2)复合数据类型中, 当他们用“==”进行比较的时候,比较的是他们在内存中的存放地址,其变量在栈中仅仅是存储引 ...
- 数百种编程语言,而我为什么要学 Python?
是应用率最高.长期霸占排行榜的常青藤 Java?是易于上手,难以精通的 C?还是在游戏和工具领域仍占主流地位的 C++?亦或是占据 Windows 桌面应用程序半壁江山的 C#?…… 我想,每个人可能 ...
- 【BZOJ2437】【NOI2011】兔兔与蛋蛋(博弈论,二分图匹配)
[BZOJ2437][NOI2011]兔兔与蛋蛋(博弈论,二分图匹配) 题面 BZOJ 题解 考虑一下暴力吧. 对于每个状态,无非就是要考虑它是否是必胜状态 这个直接用\(dfs\)爆搜即可. 这样子 ...
- 【BZOJ3052】【UOJ#58】【WC2013】糖果公园(树上莫队)
[BZOJ3052][UOJ#58][WC2013]糖果公园(树上莫队) 题面 UOJ 洛谷 Candyland 有一座糖果公园,公园里不仅有美丽的风景.好玩的游乐项目,还有许多免费糖果的发放点,这引 ...
- 洛谷 P4169 [Violet]天使玩偶/SJY摆棋子 解题报告
P4169 [Violet]天使玩偶/SJY摆棋子 题目描述 \(Ayu\)在七年前曾经收到过一个天使玩偶,当时她把它当作时间囊埋在了地下.而七年后 的今天,\(Ayu\) 却忘了她把天使玩偶埋在了哪 ...
- 解决eclipse快捷键Ctrl+Alt+Down冲突问题办法
解决eclipse快捷键Ctrl+Alt+Down冲突问题办法 时间:2016-01-18 21:11:08 阅读:376 评论:0 收藏:0 [点我收藏+] ...