设计购物车

一需求:

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]]}
以字典形式,对应用户名和历史购物记录

四.流程图:

#!/usr/bin/env python
# -*- coding:utf-8 -*-
# Author: Even

set = False    # 设置set 当输入为q就可以退出
file = open('购物车用户信息存档','r+',encoding='utf-8')    # 读取购物车用户信息文件
f = str(file.read())    # 将文件内容转化成字符串
for line in f:    # 逐行读取
    file_str = str(f)
data= eval(file_str)    # 将字符串转换为字典data
name = input("请输入姓名:")    # 提示输入用户名
password = input("请输入密码:")    # 提示输入密码
while True:
    if name in data:    # 用户名在字典data
        if password in data[name]:    # 密码如果能对应用户名,就欢迎登录
            salay = float(data[name][password])
            print('''\033[32;1m欢迎登录,当前余额为%s\033[0m'''%salay)
            break
        else:    # 否则密码输入错误,提示重新输入
            password = input("密码输入错误,请重新输入:")
            continue
    else:    # 否则判断为首次登录,将用户名,密码,工资存到用户信息文件中
        password_salay = {}
        salay_str = input("欢迎首次登录,请输入你的工资:")    # 输入工资数
        salay = float(salay_str)    # 将输入的字符串转换为数字
        password_salay[password] = salay    # 将工资对应到密码
        data[name] = password_salay    # 将密码-工资对对应到用户名
        file.seek(0)    # 文件的读取移到开头
        file.write(str(data))    # 写入新的字典信息
        file.tell()    # 返回当前位置
        break

list = [    # 购物清单
    ["iphone",5800],
    ["bike",800],
    ["macbook",17500],
    ["book",75],
    ["apple",5]
]

file_list_r = open('历史购买记录','r+',encoding='utf-8')    # 读取历史购买记录文件
f_list_r = str(file_list_r.read())
shoppinglist_dict = eval(f_list_r)    # 将历史记录信息转换为字典
if name not in shoppinglist_dict:    # 如果首次登录,会没有历史记录
    shoppinglist_dict[name] = []    # 首次登录历史记录留空
shoppinglist = shoppinglist_dict[name]    # 不是首次登录,将之前历史记录赋值到变量
shoppinglist_now = []    # 本次购物记录留空
choose = input("\n是否需要查询历史购物记录(y/n):")    # 询问是否需要查询历史记录
if choose == 'y':    # 选y,输出历史购物记录
    print("\n\n-----------历史购物记录------------")
    print(shoppinglist)
    print("--------------结束---------------\n\n")

while not set:    # 购物车开始
    print('-----------商品清单------------')    # 输出商品清单
    for index,item in enumerate(list,1):
        print(index,item)
    print("-------------结束--------------")
    number = input("请输入想购买的商品编号:")    # 输入商品编号
    if number == "q":    # 当输入为q,退出,打印本次购物清单
        set = True
        data[name][password] = str(salay)    # 将字符串的工资给到对应用户名下的密码-工资对中
        file.seek(0)
        file.write(str(data))    # 将用户信息写入购物车用户信息存档中
        file.tell()
        print("------------购物清单------------")    # 打印购物清单,提示余额
        print(shoppinglist_now)
        print("您的余额为:",salay)
        print("-------------结束--------------")
        shoppinglist.extend(shoppinglist_now)    # 将本次购物记录追加到购物记录列表中
        shoppinglist_dict[name] = shoppinglist    # 购物列表与用户名做对应
        file_list_r.seek(0)
        file_list_r.write(str(shoppinglist_dict))    # 写入字符串的购物历史记录
        file_list_r.tell()
    elif number.isdigit() == False:    # 校验输入是否为整数
        print("\033[31;1m输入不是编号内容,请重新输入\033[0m")
    elif int(number)>int(len(list)) or int(number)<= 0:    # 如果输入值不在清单中,提示报错
        print("\033[31;1m您所购买的商品不在清单中\033[0m")
    else:
        number_buy = int(number)-1
        if list[number_buy][1]<(salay):    # 如果余额够,提示成功购买,显示余额
            salay = salay - int(list[number_buy][1])
            msg = '''
                            \033[32;1m您已将%s加入购物车中
                            余额为%d\033[0m
                            ''' % (list[number_buy][0],salay)
            print(msg)
            shoppinglist_now.append(list[number_buy])    # 本次购物信息加到本次购买记录中
        else:
            print("\033[31;1m您已没有余额可以购买\033[0m")    # 否则提示余额不足

python设计购物车的更多相关文章

  1. 用Python设计第一个游戏 - 零基础入门学习Python002

    用Python设计第一个游戏 让编程改变世界 Change the world by program 有些鱼油可能会说,哇,小甲鱼你开玩笑呐!这这这这就上游戏啦?你不打算给我们讲讲变量,分支,循环,条 ...

  2. 利用PYTHON设计计算器功能

    通过利用PYTHON 设计处理计算器的功能如: 1 - 2 * ( (60-30 +(-40/5) * (9-2*5/3 + 7 /3*99/4*2998 +10 * 568/14 ))- (-4*3 ...

  3. 用Python设计一个经典小游戏

    这是关于Python的第9篇文章,介绍如何用Python设计一个经典小游戏:猜大小. 在这个游戏中,将用到前面我介绍过的所有内容:变量的使用.参数传递.函数设计.条件控制和循环等,做个整体的总结和复习 ...

  4. Java面向对象课程设计——购物车

    Java面向对象课程设计——购物车 小组成员:余景胜.刘格铭.陈国雄.达瓦次仁 一.前期调查 流程 客人(Buyer)先在商城(Mall)中浏览商品(Commidity),将浏览的商品加入购物车(Sh ...

  5. Python之购物车

    Python之购物车 msg_list = [ ['iphone',8888], ['coffe',38], ['book',90], ['Tesla',100000], ['RR',10000000 ...

  6. 零基础入门学习python--第二章 用Python设计第一个游戏

    知识点汇总1. 什么是BIF? BIF(Built-in Functions)内置函数,共68个,可直接调用,方便程序员快速编写脚本程序.输入dir(__builtins__)即可查看所有内置函数,h ...

  7. Python学习笔记之 Python设计思想&设计原则

    Python设计思想&设计原则 设计思想 1.封装 数据角度 多种数据合为一种数据 优势:代码可读性高            将数据与行为相关联 例如:电脑(内存,储存空间,...) 行为角度 ...

  8. Python初探-购物车程序

    要求: 1,用户进入后,有欢迎语并提示用户输入本金 2.用户输入正确的内容后有购物菜单显示给用户 3.当用户的本金不足以购买商品的时候有提示余额不足并告知差额 4.成功购物后提示已购买内容和购买后的余 ...

  9. python之购物车的编写(熬夜撸代码中。。。)

    购物车的编写对于我这种不是很精通函数的小白来说,简直太难了.各种坑,各种无奈啊!不过总算也是写出来了! 不多说,直接上代码! #!/usr/bin/env python#用户名 sanjiang#密码 ...

随机推荐

  1. 为vue3.0学点typescript, 解读高级类型

    知识点摘要 本节课主要关键词为: 自动类型推断 / 类型断言 / 类型别名(type) / 映射类型(Pick/Record等...) / 条件类型(extends) / 类型推断(infer) 自动 ...

  2. UVA 796 Critical Links —— (求割边(桥))

    和求割点类似,只要把>=改成>即可.这里想解释一下的是,无向图没有重边,怎么可以使得low[v]=dfn[u]呢?只要它们之间再来一个点即可. 总感觉图论要很仔细地想啊- -一不小心就弄混 ...

  3. LINUX 字体查看 字体更改mkfontdir

    Linux下字体查看: #fc-list :lang=zh 字体更改: 首先找到相应的字体库:simsun.ttf 宋体 #mkdir -p /usr/share/fonts/truetype //创 ...

  4. Java中基本数据类型

    在数据类型中,最常用也是最基础的数据类型,被称作基本数据类型.可以使用这些类型的值来代表一些简单的状态. Java 语言的基本数据类型总共有以下8 种,下面是按照用途划分出的4 个类别: 定点类型: ...

  5. Python中调用shell

    1 简单调用shell命令 os.system(command) 在一个子shell中运行command命令, 并返回command命令执行完毕后的退出状态. 这实际上是使用C标准库函数system( ...

  6. Centos镜像下载地址

    https://blog.csdn.net/weixin_42430824/article/details/81019039

  7. spark 常用函数介绍(python)

    以下是个人理解,一切以官网文档为准. http://spark.apache.org/docs/latest/api/python/pyspark.html 在开始之前,我先介绍一下,RDD是什么? ...

  8. 自定义vue-cli生成项目模板配置(1)

    最近在读<变量>,目前得到的认知之一:慢变量才是决定事物长期发展的因素. 打算自定义vue-cli的脚手架或者根据自己的需要设置项目模板的相关参数,很大程度与慢变量这个概念相关. 当然,我 ...

  9. 007-IP报文协议

    一.概述 IP协议是将多个包交换网络连接起来,它在源地址和目的地址之间传送一种称之为数据包的东西,它还提供对数据大小的重新组装功能,以适应不同网络对包大小的要求. IP不提供可靠的传输服务,它不提供端 ...

  10. Mac 配置vscode调试PHP

    Mac系统版本:MacOS Mojave  10.14.5 vscode:1.36.0 MacOS Mojave  10.14.5 系统自带 PHP 7.1.23 1.开启php sudo vim / ...