1、购物车流程图:

2、代码实现:

#!/usr/bin/env python
#coding=utf-8

ChoiceOne ='''
1.查看余额
2.购物
3.退出
'''
ChoiceTwo = '''
1.商品列表
2.已选择商品
3.结算
4.退出
'''
ShopList = [
    ["iPhone 7 Plus",6388],
    ["NBShoes",588],
    ["MacBook",13800],
    ["返回上一层",""],
]
#导入模块
import sys,fileinput
global UserName
global UserPass
def Login():
    #设置尝试密码的次数为0
    RetryNum = 0
    #格式化输入的用户名
    OldName = "Null"
    #开始程序
    while RetryNum < 3:
        #输入用户信息
        UserName = input("请输入用户名: ").strip()
        UserPass = input("请输入密码: ").strip()
        #打开用户信息文件
        UserList = open("UserInfo","r")
        #查看锁定的用户
        UserLockF = open("LockUserFile","r")
        #遍历锁定的用户有哪些
        for LockUser in UserLockF.readlines():
            #判断输入的用户是否已被锁定
            if UserName == LockUser.strip("\n"):
                sys.exit("用户已被锁定")
        #遍历用户信息文件
        for i in UserList.readlines():
            #比对账户密码是否正确
            if UserName == i.split(":")[0] and UserPass == i.split(":")[1].strip("\n"):
                UserList.close()
                UserLockF.close()
                UserAcount = [0,UserName,i.split(':')[2],]
                return UserAcount
        else:
            print("账号或密码错误!")
            #密码不正确判断本次输入和上次输入用户名是否一致
            if UserName == OldName:
                RetryNum += 1
            else:
                RetryNum = 1
                OldName = UserName
    else:
        #超过三次锁定用户
        f = open("LockUserFile","a")
        f.write(UserName+"\n")
        f.close()
        print("尝试密码过多,已被锁定!")
#初始化Login函数,并接受返回值,包括用户登录状态、用户名和账户余额
UserAcount = Login()
#print(UserAcount)
#创建空购物车列表
SelectShopList = []
#格式化已购商品总价
SelectShopTotal = 0
#如果Login函数执行成功接收的第一个返回值为0,开始购物车程序
while UserAcount[0] == 0:
    print(ChoiceOne) #打印商品列表
    SelectFirst = input("请输入你的选择: ").strip() #选择商品-第一次选择,并去除空格
    if int(SelectFirst) not in range(1,4): #判断选择是否在可选范围内
        print("输入错误,请重新输入。")   #
        continue                           #输入错误重新的输入
    if int(SelectFirst) == 1:
        print("你的余额是:",UserAcount[2])  #返回余额
        continue                             #再次执行上面的循环
    if int(SelectFirst) == 2:                 #选择的是进入商城
        while True:
            print(ChoiceTwo)                   #打印商城的功能列表
            SelectSecond = input("请输入你的选择: ") #输入选择的商城功能
            if int(SelectSecond) not in range(1,5):    #判断选择是否在可选列表
                print("输入错误,请重新输入。")
                continue                                #输入错误返回重输
            if int(SelectSecond) == 1:                  #选择商品界面
                while True:                             #进入商城购物程序
                    for SL in ShopList:
                        print(ShopList.index(SL),SL[0],SL[1],) #打印所有商品
                    ShopSelect = input("请输入你要买的商品:").strip()  #选择需要的商品
                    if int(ShopSelect) not in range(0,len(ShopList)):    #判断选择的是否在可选范围
                        print("输入错误,请重新输入。")
                        continue                                         #输入错误返回重新输入
                    elif int(ShopSelect) == len(ShopList)-1:             #输入最后一个序列,返回上一级
                        break
                    else:
                        SelectShopList.append(ShopList[int(ShopSelect)][0]) #加入选择的商品到选择商品的列表中
                        SelectShopTotal += ShopList[int(ShopSelect)][1]     #计算商品总额
                        print("你选择的商品有:")                          #打印所有选择的商品和价格
                        for i in SelectShopList:
                            print(i)
                        print("总价为: ",SelectShopTotal)
            if int(SelectSecond) == 2:                                      #查看已经选择的商品
                if len(SelectShopList) == 0:                                #如果列表长度为一即没有选择任何商品
                    print("你没有选择任何商品。")
                else:
                    for i in SelectShopList:                                #打印所有的商品
                        print(i)
                    print("总价为: ", SelectShopTotal)
            if int(SelectSecond) == 3:                                         #结算
                if int(UserAcount[2]) >= SelectShopTotal:                       #如果余额大于所选商品的金额
                    UserBanlance = int(UserAcount[2]) - SelectShopTotal            #计算剩余的余额
                    #打印所有购买的商品、总额、余额
                    print("你购买的商品有:%s,消费总额是:%s,你的账户余额是%s"%(SelectShopList,SelectShopTotal,UserBanlance))
                    for line in fileinput.input("UserInfo",inplace=1):
                        line = line.replace(UserAcount[2],str(UserBanlance),)
                        print(line,)
                else:
                    print("你的钱不够了,请重新购买。")  #余额不足以购买选择的商品
                    SelectShopList.clear()                  #清空购物车
                    continue
            if int(SelectSecond) == 4:                      #退出
                sys.exit("欢迎下次光临")

    if int(SelectFirst) == 3:                               #退出
        sys.exit("欢迎下次光临。")

代码示例

3、代码文件:

  1)LockUserFile      #用于锁定用户的文件

  2)README        #使用帮助

  3)UserInfo        #用户账号密码以及余额文件

      test:test:1230

      dukuan:dukuan:389352

Python学习(一):编写购物车的更多相关文章

  1. 从0开始的Python学习013编写一个Python脚本

    通过之前的学习我们已经了解了Python的很多基础运用了,现在我们尝试着做一个有使用价值的小脚本. 问题 需求: 我想要一个可以给我备份重要文件的程序. 需求分析: 首先文件是有存储路径,文件的路径和 ...

  2. Python学习之编写三级菜单(Day1,作业二)

    作业二:多级菜单 三级菜单 可依次进入各子菜单 在各级菜单中输入B返回上一级Q退出程序 知识点:字典的操作,while循环,for循环,if判断 思路: 1.开始,打印一级菜单让用户进行选择(可以输入 ...

  3. Python学习之编写登陆接口(Day1,作业一)

    作业一:编写登陆接口 输入用户名密码 认证成功后显示欢迎信息 输错三次后锁定(下次登陆还是锁定) 知识点:while循环,for循环,文件操作,if判断,列表操作 思路: 1.登陆,三次登陆失败,锁定 ...

  4. Python学习笔记_购物车案例

    goods_dic = { "iphone":6000, "ipad":3000, "T-shirt":100, "coffee& ...

  5. python之编写购物车(第二天)

    作业: 编写购物车 具体实现了如下功能: 1.可购买的商品信息显示 2.显示购物车内的商品信息.数量.总金额 3.购物车内的商品数量进行增加.减少和商品的删除 4.用户余额的充值 5.用户购买完成进行 ...

  6. Python学习计划

    ---恢复内容开始--- Python学习计划   https://edu.csdn.net/topic/python2?utm_source=blog4   匠人之心,成就真正Python全栈工程师 ...

  7. Python学习--01入门

    Python学习--01入门 Python是一种解释型.面向对象.动态数据类型的高级程序设计语言.和PHP一样,它是后端开发语言. 如果有C语言.PHP语言.JAVA语言等其中一种语言的基础,学习Py ...

  8. Python 学习小结

    python 学习小结 python 简明教程 1.python 文件 #!/etc/bin/python #coding=utf-8 2.main()函数 if __name__ == '__mai ...

  9. python学习笔记-python程序运行

    小白初学python,写下自己的一些想法.大神请忽略. 安装python编辑器,并配置环境(见http://www.cnblogs.com/lynn-li/p/5885001.html中 python ...

  10. python学习笔记-python解释器

    刚开始学习python,首先要了解一下python解释器. 什么是python解释器? 编写python代码保存后,我们会得到一个以.py为扩展名的文本文件.要运行此文件,就需要python解释器去执 ...

随机推荐

  1. 人体姿态的相似性评价基于OpenCV实现最近邻分类KNN K-Nearest Neighbors

    最近学习了人体姿态的相似性评价.需要用到KNN来统计与当前姿态相似的k个姿态信息. 假设我们已经有了矩阵W和给定的测试样本姿态Xi,需要寻找与Xi相似的几个姿态,来估计当前Xi的姿态标签. //knn ...

  2. 2017计算机学科夏令营上机考试-B编码字符串

    B:编码字符串 总时间限制:  1000ms 内存限制:  65536kB 描述 在数据压缩中,一个常用的方法是行程长度编码压缩.对于一个待压缩的字符串,我们可以依次记录每个字符及重复的次数.例如,待 ...

  3. Python中的单例模式

    在 Python 中,我们可以用多种方法来实现单例模式: 使用模块 使用 __new__ 使用装饰器(decorator) 使用元类(metaclass) # mysingleton.py class ...

  4. springboot学习(二)——springmvc配置使用

    以下内容,如有问题,烦请指出,谢谢 上一篇讲解了springboot的helloworld部分,这一篇开始讲解如何使用springboot进行实际的应用开发,基本上寻着spring应用的路子来讲,从s ...

  5. 记一下flex弹性布局

    flex弹性布局也越来越广泛的在我们代码中出现了,更加方便我们的布局.自己用了查,查了用,有些还是记不住,俗话说好脑子不如烂笔头,原来都是写在本子上的,很不幸的一次次的想翻的时候总是找不到,还是写博客 ...

  6. 【二十三】php之预定义超全局变量

    php提供了九种预定义超全局变量: $_GET.$_POST.$_REQUEST.$_SERVER.$_ENV.$_FILE. $_COOKIE.$_SESSION. $GLOBALS 1.$_GET ...

  7. html和css的区别

    html(结构) Hyper Text Markup Language(超文本标记语言)用于定义文档内容结构 1.该语言写的代码通常会被浏览器解析执行 2.超文本:不止包括文本,还有图片.链接.音乐. ...

  8. 【new File(String Path)加载资源问题】

    2017-12-17   15:07:38  [原创-wx] 一.我们在用IO流加载资源的时候,创建文件资源 1 File file = New File("String Path" ...

  9. Spark之搜狗日志查询实战

    1.下载搜狗日志文件: 地址:http://www.sogou.com/labs/resource/chkreg.php 2.利用WinSCP等工具将文件上传至集群. 3.创建文件夹,存放数据: mk ...

  10. Python爬虫(十四)_BeautifulSoup4 解析器

    CSS选择器:BeautifulSoup4 和lxml一样,Beautiful Soup也是一个HTML/XML的解析器,主要的功能也是如何解析和提取HTML/XML数据. lxml只会局部遍历,而B ...