py--购物车

from datetime import datetime

# 对文字进行变色显示
def color(string, c='red'):
    """
    :param string: 需要添加颜色的字符串
    :param c: 颜色取值范围 'black','red','green','yellow','blue','purple','blueness','white'
    :return:'33[{color_num[c]}m + string +  '33[0m'
    """
    color_num = {'black': 30,
                 'red': 31,
                 'green': 32,
                 'yellow': 33,
                 'blue': 34,
                 'purple': 35,
                 'blueness': 36,
                 'white': 37}
    if c in color_num:
        start = f'33[{color_num[c]}m'
    else:
        start = '33[31m'
    end = '33[0m'
    return start + string + end


def get_menu():
    """
    读取menu.txt
    :return: menu_list (菜单列表)
    """
    f = open("menu.txt", encoding="utf-8")
    data = f.readlines()
    f.close()
    menu_list = []
    for row in data:
        # append 将元素添加列表的末尾
        menu_list.append(row.split())
    return menu_list


def menu():
    """
    显示菜单
    :return: None
    """
    menu_list = get_menu()
    print(color("#", 'yellow') * 30)
    print("XXX超市为您服务",datetime.now())
    print(" 编号	商品名	  单价	")
    for m in menu_list[1:]:
        print(f" {m[0]:^4}{m[1]:^10}{m[2]:^8}")
    print(color("#", 'yellow') * 30)


def shopping_cart():
    carts = {}
    while True:
        no = input("请输入要买的商品编号,按M显示菜单 ,按q退出:")
        if no == 'q':
            break
        elif no == 'M':
            menu()
            continue
        elif not no.isdigit():
            print("输入有误")
            continue
        no = int(no)
        menu_list = get_menu()
        if 0 < no < len(menu_list):
            count = input("要买的数量:")
            if count.isdigit():
                count = int(count)
            else:
                print("输入有误")
                continue
            goods_name = menu_list[no][1]
            goods_price = float(menu_list[no][2])
            print(f"您选购了{color(goods_name)},单价{color(str(goods_price), 'green')}元,数量{count},共{goods_price * count}元")
            if no in carts:
                carts[no][2] += count
            else:
                carts[no] = [goods_name, goods_price, count]
        else:
            print(color("没有此商品! "))
    return carts


def check(carts):
    goods_sum = 0
    print("编号	 商品名	 单价	 数量")
    for k in carts:
        goods = carts[k]
        goods_sum += goods[1] * goods[2]
        print('-' * 25)
        print(f"{k}	{goods[0]}		{goods[1]}		{goods[2]}")
    print(f"账单:{color(str(goods_sum), 'yellow')}元")
    return goods_sum


def pay(price):
    while True:
        money = input(f"请支付{price}元,Q退出: ")
        if money == 'Q':
            return False
        try:
            money = float(money)
        except Exception as e:
            print(e, "请输入一个数字")
        else:
            break
    if money >= price:
        print(f"支付成功,找零{money - price}元")
        return True
    else:
        return pay(price - money)


def main():
     while True:
        id = input("请输入账号:")
        password = input("请输入密码:")
        if id == 'admin' and password == '12315':
            menu()
            if pay(check(shopping_cart())):
                print(color("购物成功,欢迎下次光临!", 'blue'))
            else:
                print(color("取消成功!"))
        else:
            print("账号或密码不对,请重新输入:")
# 只有运行当前py文件才会执行
if __name__ == '__main__':
     main()
原文地址:https://www.cnblogs.com/HK769405/p/14014071.html