python作业:购物车(第二周)

一.作业需求:

1、启动程序后,输入用户名密码后,如果是第一次登录,让用户输入工资,然后打印商品列表

2、允许用户根据商品编号购买商品

3、用户选择商品后,检测余额是否够,够就直接扣款,不够就提醒

4、可随时退出,退出时,打印已购买商品和余额

5、在用户使用过程中, 关键输出,如余额,商品已加入购物车等消息,需高亮显示

6、用户下一次登录后,输入用户名密码,直接回到上次的状态,即上次消费的余额什么的还是那些,再次登录可继续购买

7、允许查询之前的消费记录

二.购物车用户信息:

{‘name‘: {‘password‘: ‘10000‘}, ‘cx‘: {‘123‘: ‘725.0‘}, ‘even‘: {‘qw‘: ‘1560‘}, ‘cv1‘: {‘1‘: 100.5}}以字典形式存储用户名,密码,余额

三.历史购物信息:

{‘name‘: [[‘iphone‘, 5800], [‘bike‘, 800]], ‘cx‘: [[‘iphone‘, 5800], [‘apple‘, 5],  [‘apple‘, 5], [‘book‘, 75]]}以字典形式,对应用户名和历史购物记录

四.流程图:

五.代码:(python3.6,mac环境):

 1 #!/usr/bin/env python
 2 # -*- coding:utf-8 -*-
 3 # Author: Even
 4
 5 set = False    # 设置set 当输入为q就可以退出
 6 file = open(‘购物车用户信息存档‘,‘r+‘,encoding=‘utf-8‘)    # 读取购物车用户信息文件
 7 f = str(file.read())    # 将文件内容转化成字符串
 8 for line in f:    # 逐行读取
 9     file_str = str(f)
10 data= eval(file_str)    # 将字符串转换为字典data
11 name = input("请输入姓名:")    # 提示输入用户名
12 password = input("请输入密码:")    # 提示输入密码
13 while True:
14     if name in data:    # 用户名在字典data
15         if password in data[name]:    # 密码如果能对应用户名,就欢迎登录
16             salay = float(data[name][password])
17             print(‘‘‘\033[32;1m欢迎登录,当前余额为%s\033[0m‘‘‘%salay)
18             break
19         else:    # 否则密码输入错误,提示重新输入
20             password = input("密码输入错误,请重新输入:")
21             continue
22     else:    # 否则判断为首次登录,将用户名,密码,工资存到用户信息文件中
23         password_salay = {}
24         salay_str = input("欢迎首次登录,请输入你的工资:")    # 输入工资数
25         salay = float(salay_str)    # 将输入的字符串转换为数字
26         password_salay[password] = salay    # 将工资对应到密码
27         data[name] = password_salay    # 将密码-工资对对应到用户名
28         file.seek(0)    # 文件的读取移到开头
29         file.write(str(data))    # 写入新的字典信息
30         file.tell()    # 返回当前位置
31         break
32
33
34 list = [    # 购物清单
35     ["iphone",5800],
36     ["bike",800],
37     ["macbook",17500],
38     ["book",75],
39     ["apple",5]
40 ]
41
42 file_list_r = open(‘历史购买记录‘,‘r+‘,encoding=‘utf-8‘)    # 读取历史购买记录文件
43 f_list_r = str(file_list_r.read())
44 shoppinglist_dict = eval(f_list_r)    # 将历史记录信息转换为字典
45 if name not in shoppinglist_dict:    # 如果首次登录,会没有历史记录
46     shoppinglist_dict[name] = []    # 首次登录历史记录留空
47 shoppinglist = shoppinglist_dict[name]    # 不是首次登录,将之前历史记录赋值到变量
48 shoppinglist_now = []    # 本次购物记录留空
49 choose = input("\n是否需要查询历史购物记录(y/n):")    # 询问是否需要查询历史记录
50 if choose == ‘y‘:    # 选y,输出历史购物记录
51     print("\n\n-----------历史购物记录------------")
52     print(shoppinglist)
53     print("--------------结束---------------\n\n")
54
55 while not set:    # 购物车开始
56     print(‘-----------商品清单------------‘)    # 输出商品清单
57     for index,item in enumerate(list,1):
58         print(index,item)
59     print("-------------结束--------------")
60     number = input("请输入想购买的商品编号:")    # 输入商品编号
61     if number == "q":    # 当输入为q,退出,打印本次购物清单
62         set = True
63         data[name][password] = str(salay)    # 将字符串的工资给到对应用户名下的密码-工资对中
64         file.seek(0)
65         file.write(str(data))    # 将用户信息写入购物车用户信息存档中
66         file.tell()
67         print("------------购物清单------------")    # 打印购物清单,提示余额
68         print(shoppinglist_now)
69         print("您的余额为:",salay)
70         print("-------------结束--------------")
71         shoppinglist.extend(shoppinglist_now)    # 将本次购物记录追加到购物记录列表中
72         shoppinglist_dict[name] = shoppinglist    # 购物列表与用户名做对应
73         file_list_r.seek(0)
74         file_list_r.write(str(shoppinglist_dict))    # 写入字符串的购物历史记录
75         file_list_r.tell()
76     elif number.isdigit() == False:    # 校验输入是否为整数
77         print("\033[31;1m输入不是编号内容,请重新输入\033[0m")
78     elif int(number)>int(len(list)) or int(number)<= 0:    # 如果输入值不在清单中,提示报错
79         print("\033[31;1m您所购买的商品不在清单中\033[0m")
80     else:
81         number_buy = int(number)-1
82         if list[number_buy][1]<(salay):    # 如果余额够,提示成功购买,显示余额
83             salay = salay - int(list[number_buy][1])
84             msg = ‘‘‘
85                             \033[32;1m您已将%s加入购物车中
86                             余额为%d\033[0m
87                             ‘‘‘ % (list[number_buy][0],salay)
88             print(msg)
89             shoppinglist_now.append(list[number_buy])    # 本次购物信息加到本次购买记录中
90         else:
91             print("\033[31;1m您已没有余额可以购买\033[0m")    # 否则提示余额不足

时间: 2024-12-09 17:47:53

python作业:购物车(第二周)的相关文章

Python学习心得第二周-02

三 字符串 #作用:名字,性别,国籍,地址等描述信息 #定义:在单引号\双引号\三引号内,由一串字符组成 name='egon' #优先掌握的操作: #1.按索引取值(正向取+反向取) :只能取 # 倒着取值(了解):注意方向要一致 msg='hello world' print(msg[0]) print(msg[-1]) #2.切片:从一个大字符串中切除一个子字符串(顾头不顾尾,步长) msg='hello world' print(msg[0:5]) print(msg[4:8:2]) p

百万年薪python之路 -- 第二周 --模拟博客园系统

项目分析: 一.首先程序启动,显示下面内容供用户选择: 1.请登录 2.请注册 3.进入文章页面 4.进入评论页面 5.进入日记页面 6.进入收藏页面 7.注销账号 8.退出整个程序 二.必须实现的功能: 1.注册功能要求: a.用户名.密码要记录在文件中. b.用户名要求:只能含有字母或者数字不能含有特殊字符并且确保用户名唯一. c.密码要求:长度要在6~14个字符之间. 2.登录功能要求: a.用户输入用户名.密码进行登录验证. b.登录成功之后,才可以访问3 - 7选项,如果没有登录或者登

Python学习之旅--第二周--元组、字符串、运算、字典

一.元组 另一种有序列表叫元组:tuple.tuple和list非常类似,但是tuple一旦初始化就不能修改,比如同样是列出同学的名字: # Author:Tim Gu tuple = ("Tim",'Jack','mike') 元组元素不可被修改,只读.不过有一种情况是内嵌列表的时候,列表内的元素可修改 # Author:Tim Gu tuple = ("Tim",'Jack','mike',['john','tom']) print(tuple) tuple[3

第二周作业-词频统计

本周作业是词频统计,编程具体要求如下: https://edu.cnblogs.com/campus/nenu/SWE2017FALL/homework/922 对实现功能进行简要的介绍: 功能一:小文件输入,为表明程序能跑.需要在控制台下输入命令,得到文件中不重复的总单词数.并对单词出现的次数进行排序输出. 功能二:支持命令行输入英文作品的文件名,亲自录入,输出显示不重复单词总数,并对出现频率最高的前10的单词进行输出 功能三:支持命令行输入存储有英文作品文件的目录名,批量统计词频. 功能四:

解题报告——2018级2016第二学期第二周作业

解题报告——2018级2016第二学期第二周作业 D:迷宫问题 题目描述: 定义一个二维数组: int maze[5][5] = { 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 0, }; 它表示一个迷宫,其中的1表示墙壁,0表示可以走的路,只能横着走或竖着走,不能斜着走,要求编程序找出从左上角到右下角的最短路线. 输入 一个5 × 5的二维数组,表示一个迷宫.数据保证有唯一解. 输出 左上角到右

马哥linux 培训第二周作业

注意:第二周作业,请将以下题目整理在51cto博客当中,完成后请将对应的博文链接地址提交在答案栏中,提交格式如下:学号+姓名+博文链接地址eg:1+张三+http://mageedu.blog.51cto.com/4265610/1794420 本周作业内容:1.Linux上的文件管理类命令都有哪些,其常用的使用方法及其相关示例演示. 文件管理的命令有cp.mv.rm 复制命令:cp 用法: cp [-adfilprsu] 来源文件(source) 目标文件(destination) cp [o

软件项目管理第二周作业

软件项目管理作业: 1.代码规范 代码就像美食一样,不仅好不好吃,卖相也很重要. 代码风格:简明.易读. 4个空格缩进,行宽100字符,复杂的表达式多用括号清楚的表示逻辑关系,不要好几条语句放在一行等等. 注释主要是知道程序做什么,为什么这样做,还有注意的地方提醒. 2.燃尽图.鱼刺图.甘特图 燃尽图:顾名思义,一堆木头烧完了,一开始挺多的,大事化小,越来越少,直到化为灰烬. 鱼刺图:貌似是鱼刺有很多,一个结果有很多原因且又相互有联系,有果必有因,找出问题的原因,解决问题. 甘特图:工作进度图,

第二周作业补交(请老师看一下)

#include<stdio.h> #include<math.h> int main(void) { int money,year; double rate,sum; printf("Enter money:"); scanf("%d",&money); printf("Enter year:"); scanf("%d",&year); printf("Enter rate:

魏昊卿——《Linux内核分析》第二周作业:了解操作系统是怎样工作的

魏昊卿——<Linux内核分析>第二周作业:了解操作系统是怎样工作的 一.实验部分 使用实验楼的虚拟机打开shell cd LinuxKernel/linux-3.9.4 qemu -kernel arch/x86/boot/bzImage 然后cd mykernel 您可以看到qemu窗口输出的内容的代码mymain.c和myinterrupt.c 使用自己的Linux系统环境搭建过程参见mykernel,其中也可以找到一个简单的时间片轮转多道程序内核代码 mymain.c myinterr

学习linux第二周作业

第二周作业: 本周作业内容: 1.Linux上的文件管理类命令都有哪些,其常用的使用方法及其相关示例演示. touch,rm,mv,cp,file,ls,chmod,chown,ln,rename, touch 修改文件atime,如果文件不存在,那么创建该文件. rm:删除文件. -r:循环删除,包含文件和目录 -f:强制删除,布询问. -i:询问是否删除. 默认情况下,系统自带别名,rm=rm -i mv:移动文件,可以在移动的过程中重命名文件或文件夹. 例如:移动重命名mytest1目录为