设计购物车

一需求:

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. java虚拟机JVM

    Java Virtual Machine ,简称JVM; 它是运行所有Java程序的抽象计算机,是Java语言的运行环境,它是Java 最具吸引力的特性之一,JVM读取并处理编译过的与平台无关的字节码 ...

  2. 安装完Pycharm,启动时碰到"failed to load jvm dll"的解决方案

    今天安装完系统,配置pycharm的环境的时候,启动pycharm时,碰到"failed to load jvm dll"的错误, 下面给出其解决方案: 安装Microsoft V ...

  3. openapi and light-4j

    light-4j项目支持openapi规范,本文介绍一下参照相关demo做的上传功能. openapi.yaml,按照规范编写内容,/openapi/swagger可以查看对应的swagger页面,A ...

  4. 机器学习朴素贝叶斯 SVC对新闻文本进行分类

    朴素贝叶斯分类器模型(Naive Bayles) Model basic introduction: 朴素贝叶斯分类器是通过数学家贝叶斯的贝叶斯理论构造的,下面先简单介绍贝叶斯的几个公式: 先验概率: ...

  5. Flutter移动电商实战 --(7)dio基础_POST请求的使用

    这节学习一下POST请求的使用,其实POST和Get请求都是在工作中最重要的两种请求.比如我们要传递一组表单数据过去,这时候用Get请求就是不太合适的,使用POST比较好. SingleChildSc ...

  6. Video Captioning 综述

    1.Unsupervised learning of video representations using LSTMs 方法:从先前的帧编码预测未来帧序列 相似于Sequence to sequen ...

  7. CentOS7 源码安装 PostgreSQL 12

    PostgreSQL 12 源码安装 Table of Contents 1. 下载 2. 准备环境 3. 编译安装 4. 设置环境变量 5. 初始化数据库 6. 配置参数文件 6.1. postgr ...

  8. openstack部署glance

    一.建立glance数据库并且给权限设置第三方登录 mysql -uroot -p0330 CREATE DATABASE glance; GRANT ALL PRIVILEGES ON glance ...

  9. Swagger 介绍

    简介Swagger 是最流行的 API 开发工具,它遵循 OpenAPI Specification(OpenAPI 规范,也简称 OAS).Swagger 可以贯穿于整个 API 生态,如 API ...

  10. GlusterFS集群

    使用架构: 2台机器安装 GlusterFS 组成一个 Distributed Replicated Volumes集群 192.168.0.92 服务端 192.168.0.93 服务端 192.1 ...