python3购物车

python3实现购物车小程序,优化后将程序分成函数,用文件注册和验证用户名密码。

 
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time    : 2020/4/20 下午4:12
# @Author  : hk
# @Site    : 
# @File    : 购物车.py
# @Software: PyCharm

"""
需求描述:
    1.输入正确账号,密码,进入购物车购物
    2.登录失败,重新输入账号密码
    3.同一账号连续登录失败超过三次,则锁定该账号
    4.登录已锁定账号,提示账号已锁定
  """

#显示已购商品列表函数
def shoping_list(myshping,money):
    print('=============您的购物清单如下=================')
    dic1={}
    for i in myshping:
        if dic1.get(i) == None:
            dic1[i] =1
        else:
            dic1[i] +=1
    for k,v in dic1.items():
        print(k,v)
    print("===========================================\n您的余额:%d"%money)
#购物车函数
def shoping():
    goods = [{'name': '电脑', 'price': 1999},
             {'name': '鼠标', 'price': 10},
             {'name': '游艇', 'price': 20},
             {'name': '美女', 'price': 998},
             {'name': 'iphone', 'price': 5000},

             ]
    flag = False
    my_shopping = []
    while True:
        money = input("请输入您的金额:\n")
        if not money.isdigit():
            keys = input("输入错误,请按任意键重新输入,或输入q退出购买\n")
            if keys.upper() == 'Q':
                break
            continue
        money = int(money)
        while True:
            print('+++++++++++商品列表+++++++++++++')
            for index, key in enumerate(goods):
                print(index + 1, key['name'], key['price'])  # 这里key取到的值是每一行的字典,再按key字典的键值打印出来商品明细
            print('我的钱包余额', money)
            num = input("请输入想要购买的商品序号:【或输入q结束购买】\n")
            if num.upper() == 'Q':
                flag = True
                break
            if not num.isdigit():
                print("输入错误,请重新输入!")

                continue
            num = int(num)
            if num > 0 and num < len(goods) + 1:
                # print(num,"开始购物\n----------")
                if money >= goods[num - 1]['price']:
                    my_shopping.append(goods[num - 1]['name'])
                    money = money - goods[num - 1]['price']
                    shoping_list(my_shopping,money)
                    # print(my_shopping, "我的余额", money)
                else:
                    # print("余额不足")
                    while True:
                        chongzhi = input("余额不足,请输入充值金额:【或输入q结束购买。]\n")
                        if chongzhi.upper() == "Q":
                            flag = True
                            break
                        if not chongzhi.isdigit():
                            # keys_1=input("输入错误,请重新输入充值金额:或输入q结束购买。。。充值部分的错误]")
                            # if keys_1.upper() == "Q":
                            #     flag = True
                            #     break
                            print("输入错误,请重新输入")
                            continue
                        money = money + int(chongzhi)
                        break
                    # break

                    if flag == True:
                        break
            else:
                print("请输入正确商品编号")
                continue
        if flag == True:
            # 打印出购物清单并统计,显示余额。
            print("谢谢光临!")
            shoping_list(my_shopping,money)
            exit(0)
        continue

#注册函数
def regist():
    """
    注册用户
    name: 用户名称
    password:用户密码
    :return:
    """

    # 读取用户文件
    with open("user.txt", encoding='utf-8',mode="r") as read_file:
        read_data = read_file.readlines()
        i_name = []
        for i in read_data:
            i_line = i.strip().split(',')
            i_name.append(i_line[0])
        while True:
            username = input('请输入用户名:\n').strip()
            if username in i_name:
                print('用户名已经存在,请重新输入。')
                continue
            else:
                password = input('请输入密码:\n').strip()
                with open('user.txt',encoding='utf-8',mode='a') as read_f1:
                    new_user = [username,password,'0']
                    new_user ='\n' + ','.join(new_user)
                    # print(new_user,type(new_user))
                    read_f1.write(new_user)
                    print('%s,恭喜您注册成功,请登录'%username)
                    break
#修改用户登录次数函数
def modify_user(name, mode="add"):
    """
    修改用户名单中的登录错误次数
    :param name: 用户名称
    :param mode:add,登录错误次数自增1;del,登录错误次数重置为0
    :return:
    """

    # 读取用户文件
    with open("user.txt", encoding='utf-8',mode="r") as read_file:
        read_data = read_file.readlines()

    # 写入用户文件
    with open("user.txt", encoding='utf-8',mode="w") as write_file:
        for line in read_data:
            new_line = line.split(',')
            if new_line[0] == name:
                if mode == "add":
                    new_line[2] = int(new_line[2]) + 1
                    new_line[2] = str(new_line[2])
                    print(">>>>>>>",new_line)
                else:
                    new_line[2] = "0"
                new_line = ",".join(new_line) + "\n"
                write_file.write(new_line)
                # print('写入',new_line)
                write_file.flush()
            else:
                write_file.write(line)

#验证用户名密码函数
def auth(name, passwd):
    with open("user.txt", encoding='utf-8',mode="r") as read_file:
        for eachLine in read_file:
            user_name, password, errors = eachLine.strip().split(',')
            if name == user_name:
                if int(errors) < 3:
                    if password == passwd:
                        print ("Dear [%s],欢迎你登录本购物车" % name)
                        modify_user(name, "del")
                        shoping()
                        # return True
                    else:
                        print ("密码错误,请重新输入用户名密码!")
                        modify_user(name, "add")
                        return False
                else:
                    print ("您的用户已经锁定,请联系管理员!")
                    return False
        else:
            print ("用户名不存在,请重新输入!")
            return False


def login():
    while True:
        name = input("请输入用户名:")
        passwd = input("表输入密码:")
        if auth(name, passwd):
            break
def menu() :
    while True:
        mode = input('请您注册或登录:\n'
                    '注册选1\n'
                    '登录选2\n'
                     '或按输入q退出\n').strip()
        if mode == '1':
            regist()
        elif mode == '2':
            login()
        elif mode.upper() == 'Q':
            exit(0)
        else:
            print("输入错误,请重新输入,或按q退出。")
            continue



if __name__ == '__main__':
    menu()

user.txt文件内容

hk,123,2

abc,222,2

haha,1,1

test,1234,0

猜你喜欢

转载自www.cnblogs.com/amhk/p/12752704.html