第二周作业购物车程序

#coding:utf-8
#Author:Mr Zhi
file_open = open(‘购物车用户信息‘,‘r+‘,encoding="utf-8")  #购物车用户信息文件保存着用户名密码和余额
f = str(file_open.read())
for line in f:
     file_str = str(f)
file_open_dict = eval(file_str) #转换成字典(文件内容原先是字典)
username = input("输入用户名:")
password = input("输入密码:")
while True:
    if username in file_open_dict:  #判断用户名是否在购物车用户信息文件中
        if password in file_open_dict[username]:
            salary = int(file_open_dict[username][password])
            print(‘‘‘\033[32;1m欢迎登录,当前余额为%s\033[0m‘‘‘ % salary)
            break
        else:
            password = input("密码错误,请重新输入密码")
            continue
    else:
        password_salary = {} #定义密码,工资空字典
        salary_str = input("欢迎第一次登陆,请输入工资:")
        salary =float(salary_str) #输入的工资转成数字
        password_salary[password] = salary  #密码与数字对应
        file_open_dict[username] = password_salary  #用户名和密码工资对应
        file_open.seek(0)  #文件读取到开头
        file_open.write(str(file_open_dict)) #把用户名密码和工资写到文件中
        file_open.tell()   #返回当前位置
        break
product_list = [   #购物清单
    [‘iphone6‘, 5000],
    [‘bike‘, 800],
    [‘python books‘, 200],
    [‘bag‘, 300],
    [‘macbook pro‘, 9000],
]
history_f = open(‘history‘,‘r+‘,encoding="utf-8")  #打开history文件
f2 = str(history_f.read())
for line in f2:
     file_str2 = str(f2)
history_line = eval(file_str2)
if username not in history_line:
    history_line[username] = []
shoppinglist = history_line[username]
shoppinglist_new = []
choice = input ("\033[35;1m是否需要查询历史购物记录(y/n)\033[0m") #询问是否查询历史记录
if choice == "y" or choice =="Y":
    print("---历史购物记录---")
    print(shoppinglist)
while True:
    print("---商品清单---")
    for index,item in enumerate(product_list): #对元组进行遍历并加上索引
        print(index,item) #输出商品
    choice = input("输入商品编码:")
    #choice = int(choice)
    if choice.isdigit():
        choice = int(choice)
        if choice < len(product_list) and choice >= 0:
            p_item = product_list[int(choice)] #把商品赋值给p_item
            print(p_item)
            if p_item[1] <= salary: #判断商品价格和工资的大小
                shoppinglist_new.append(p_item) #把商品加到元组
                salary -= p_item[1] #余额 = 工资 - 商品
                print("\033[37;1m买了 %s 还剩下 %s 元\033[0m" % (p_item, salary))
            else:
                print("你的余额不足")
        else:
            print("你选择的编码%无效" % choice)
    elif choice == "q" or choice =="Q":
        file_open_dict[username][password] = salary #工资给对应的用户密码位置
        file_open.seek(0)
        file_open.write(str(file_open_dict)) #把余额写到购物车用户信息文件中
        file_open.tell()
        print("----已购商品清单----")
        print(shoppinglist_new)  # 打印清单
        print("\033[31;1m你的余额:%s\033[0m" % salary)  # 打印余额
        shoppinglist.extend(shoppinglist_new)  # 本次购物记录追加到购物列表中
        history_line[username] = shoppinglist  # 购物列表和用户名对应
        history_f.seek(0) #移动文件读取指针到开头
        history_f.write(str(history_line))  # 购物记录写入文件
        history_f.tell() #返回文件的当前位置
        break
    else:
        print("你选择的编码%无效" % choice)
时间: 2024-11-06 09:54:28

第二周作业购物车程序的相关文章

解题报告——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

魏昊卿——《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

软件工程 第二周作业

##软件工程第二周作业 提出问题 1. 一般来说,想要自己的程序跑得又快又好,就要减少函数的反复调用,但有所得则必有所失,效能提高就有可能伴随着程序的稳定性的降低,这两者应该如何权衡呢? 2. 关于5.3.5 老板驱动的流程,这种开发流程模式存在着一些问题,那要如何解决这些问题呢? 这种模式当然也有它的问题. 领导对许多技术细节是外行. 领导未必懂得软件项目的管理,领导的权威影响了自由的交流和创造. 领导最擅长的管理方式是行政命令,这未必能管好软件团队或任何需要创造力的团队. 领导的精力有限,领

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

#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第二周作业

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

软件测试第二周作业 wordcount

软件测试第二周作业 wordcount Github地址 https://github.com/mxz96102/word_count PSP2.1表格 PSP2.1 PSP 阶段 预估耗时 (分钟) 实际耗时 (分钟) Planning 计划 25 30 · Estimate · 估计这个任务需要多少时间 150 252 Development 开发     · Analysis · 需求分析 (包括学习新技术) 20 20 · Design Spec · 生成设计文档 0 0 · Desig

软件质量与测试第二周作业 WordCount

第二周作业 WordCount 一.Github 地址 https://github.com/llag9810/Software-Quality-and-Testing-Wordcount 二.PSP2.1 表格 PSP2.1 PSP阶段 预估耗时 (分钟) 实际耗时 (分钟) Planning 计划 60 25 · Estimate · 估计这个任务需要多少时间 30 15 Development 开发 600 810 · Analysis · 需求分析 (包括学习新技术) 60 60 · D

第二周作业-词频统计

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