python的学习-用户登录购物程序[三]
· 技术积累 · Python

根据需求,写出购物车程序 1、启动程序后,输入用户名密码后,让用户输入工资,然后打印商品列表
2、允许用户根据商品编号购买商品
3、用户选择商品后,检测余额是否够,够就直接扣款,不够就提醒
4、可随时退出,退出时,打印已购买商品和余额
5、在用户使用过程中, 关键输出,如余额,商品已加入购物车等消息,需高亮显示

#!/bin/env python3
#-*- coding:utf-8 -*-
#author:jinchuang

#定义商品列表
Commodity_List = [
    {"name": "中端电脑", "price": 7000},
    {"name": "普通鼠标", "price": 50},
    {"name": "豪华游艇", "price": 2000000},
    {"name": "路飞老师", "price": 995},
]

#定义购物程序一些名称变量
Cmmodity_Buy_List = []
Cmmodity_Name = "可购买商品列表如下:"
Shopping_List = "你的购物车列表"
Shopping_Buy_List = "你已购买的商品列表"


#定义登录程序一些名称变量
User_Passwd = {'admin':'123456','abc':'123'}
Shopping_Mall = "登录购物商城"
Login_Prompt = "欢迎登录购物商城!"

#购物程序
def Shopping():
    Money = input("请输入你的存款金额:") #定义存款可用额度
    if Money.isdigit(): #判断是否为数字
        Money = int(Money)

        #进入购物循环
        while True:
            print(Cmmodity_Name.center(30,"-"))
            for index,i in enumerate(Commodity_List): #循环打印商品列表
                print(index,i)
            #开始购买商品
            Number = input("输入商品编号添加到购物车中[p查看购物车 q结算退出]:")
            if Number.isdigit():
                Number = int(Number)
                if Number < len(Commodity_List) and Number >=0: #判断商品是否存在
                    if Commodity_List[Number]['price'] <= Money: #判断余额是否可以购买
                        Cmmodity_Buy_List.append(Commodity_List[Number]) #添加到购物车中
                        Money -= Commodity_List[Number]['price'] #减去商品所花掉的钱
                        print("\033[33m添加 %s 商品到购物车中\033[0m,\033[31m余额剩余:%s\033[0m" %(Commodity_List[Number],Money))
                    else:
                        print("\033[33m你的存款余额不够了,只剩下\033[0m \033[34m%s\033[0m" %(Money))
                else:
                    print("\033[31m请输入正确的商品编号\033[0m")
            #打印购物车中的商品
            elif Number == 'p':
                print("\033[33m%s\033[0m" %(Shopping_List.center(30,'-')))
                if len(Cmmodity_Buy_List): #判断购物车是否为空
                    for p in Cmmodity_Buy_List:
                        print(p)
                    print("\n")
                else:
                    print('你的购物车空空如也!去买点商品再来看吧\n')
            #结算退出程序
            elif Number == 'q':
                print("\033[33m%s\033[0m" %(Shopping_Buy_List.center(30,'-')))
                for pl in Cmmodity_Buy_List: #打印已经购买的商品列表
                    print(pl)
                print("\033[33m你的余额剩余:\033[0m \033[31m%s\033[0m" %(Money))
                exit ()

            else:
                print("\033[31m输入错误\033[0m")

    else:
        print("\033[31m请输入正确的金额\033[0m")
        Shopping()

#用户登陆
i = 0
while i < 3:
    print(Shopping_Mall.center(30,'-'))
    uname = input("用户名:")
    upass = input("密码:")
    if uname in User_Passwd and upass == User_Passwd[uname]:
        print ("\033[33m%s\033[0m" %(Login_Prompt.center(30,' ')))
        #登录成功执行购物程序
        Shopping()
    else:
        print ("\033[31m登录失败\033[0m")
    i+=1
    if i == 3:
        print ("\033[31m你已经输错 %s 次,退出程序\033[0m" %(i))

扩展需求:
这个文件存取和判断,写的我老费劲了!
1、用户下一次登录后,输入用户名密码,直接回到上次的状态,即上次消费的余额什么的还是那些,再次登录可继续购买
2、允许查询之前的消费记录

#!/bin/env python3
#-*- coding:utf-8 -*-
#author:jinchuang
import os
#定义商品列表
Commodity_List = [
    {"name": "中端电脑", "price": 7000},
    {"name": "普通鼠标", "price": 50},
    {"name": "豪华游艇", "price": 2000000},
    {"name": "路飞老师", "price": 995},
]

#定义购物程序一些名称变量
Cmmodity_Buy_List = []
Cmmodity_Name = "可购买商品列表如下:"
Shopping_List = "你的购物车列表"
Shopping_Buy_List = "你已购买的商品列表"


#定义登录程序一些名称变量
User_Passwd = {'admin':'123456','abc':'123'}
Shopping_Mall = "登录购物商城"
Login_Prompt = "欢迎登录购物商城!"

#购物程序
def shopping():
    file_money = open('money.txt','a+',encoding='utf-8') #定义存款金额文件
    file_money.seek(0) #从头读取
    Money = file_money.read()
    if Money:#判断是否为空
        if Money.isdigit(): #判断是否为数字
            Money = int(Money)
        else:
            Money = int(Money)
        print("\033[33m你的存款金额为:\033[0m \033[31m%s\033[0m" %(Money))

        #进入购物循环
        while True:
            print(Cmmodity_Name.center(30,"-"))
            for index,i in enumerate(Commodity_List): #循环打印商品列表
                print(index,i)
            #开始购买商品
            Number = input("\n输入商品编号添加到购物车中[u查看已购买商品 p查看购物车 q结算退出]:")
            if Number.isdigit():
                Number = int(Number)
                if Number < len(Commodity_List) and Number >=0: #判断商品是否存在
                    if Commodity_List[Number]['price'] <= Money: #判断余额是否可以购买
                        Cmmodity_Buy_List.append(Commodity_List[Number]) #添加到购物车中
                        Money -= Commodity_List[Number]['price'] #减去商品所花掉的钱
                        print("\033[33m添加 %s 商品到购物车中\033[0m,\033[31m余额剩余:%s\033[0m" %(Commodity_List[Number],Money))
                    else:
                        print("\033[33m你的存款余额不够了,只剩下\033[0m \033[34m%s\033[0m" %(Money))
                else:
                    print("\033[31m请输入正确的商品编号\033[0m")
            #打印购物车中的商品
            elif Number == 'p':
                print("\033[33m%s\033[0m" %(Shopping_List.center(30,'-')))
                if len(Cmmodity_Buy_List): #判断购物车是否为空
                    for p in Cmmodity_Buy_List:
                        print(p)
                else:
                    print('你的购物车空空如也!去买点商品再来看吧')
            elif Number == 'u':
                if os.path.exists('shopping.txt'): #判断是否有此文件
                    ff = open('shopping.txt','r',encoding='utf-8') #读取购买过的商品文件列表
                    if ff:
                        ff.seek(0)
                        for le in ff:
                            le = le.strip()
                            print(le)
                        ff.close()
                else:
                    print('你没有购买过商品')
            #结算退出程序
            elif Number == 'q':
                print("\033[33m%s\033[0m" %(Shopping_Buy_List.center(30,'-')))
                if os.path.exists('shopping.txt'):
                    f = open("shopping.txt",'a',encoding='utf-8')
                    for pl in Cmmodity_Buy_List: #打印已经购买的商品列表
                        print(pl)
                        f.write("%s\n" %(pl)) #购买过的商品存档,下次读取
                    f.close()
                else:
                    f = open("shopping.txt",'a',encoding='utf-8')
                    for pl in Cmmodity_Buy_List: #打印已经购买的商品列表
                        print(pl)
                        f.write("%s\n" %(pl)) #购买过的商品存档,下次读取
                    f.close()
                print("\033[33m你的余额剩余:\033[0m \033[31m%s\033[0m" %(Money))
                file_money.close()
                money_yu = open('money.txt','w',encoding='utf-8')
                money_yu.write("%s" %(Money))
                money_yu.close()
                exit ()

        else:
            print("\033[31m输入错误\033[0m")

    else:
        Money = input("请输入你的存款金额:") #定义存款可用额度
        if Money.isdigit(): #判断输入是否为数字
            Money = int(Money)
        else:
            print('请输入正确的数字金额!')
            shopping()
        file_money.write('%s' %(Money)) #写入初始存款金额到文件中
        file_money.flush() #写入数据到文件中
        shopping()

#用户登陆
i = 0
while i < 3:
    print(Shopping_Mall.center(30,'-'))
    uname = input("用户名:")
    upass = input("密码:")
    if uname in User_Passwd and upass == User_Passwd[uname]:
        print ("\033[33m%s\033[0m" %(Login_Prompt.center(30,' ')))
        #登录成功执行下个程序
        shopping()
    else:
        print ("\033[31m登录失败\033[0m")
    i+=1
    if i == 3:
        print ("\033[31m你已经输错 %s 次,退出程序\033[0m" %(i))

本文最后更新时间 2023-04-02
文章链接地址:
https://me.jinchuang.org/archives/226.html
本站文章除注明[转载|引用],均为本站原创内容,转载前请注明出处

留言