zoukankan      html  css  js  c++  java
  • 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()
    
  • 相关阅读:
    迭代合并排序算法
    appendChild和insertBefore的区别
    使用定时器处理数组
    正则表达式 删除string首尾的空白
    图片滚动
    数组合并法(IE7性能优化)
    赋值取值+arguments
    条件预加载(conditional advanceloading)
    Just a Note~
    腾讯马拉松复赛第一场
  • 原文地址:https://www.cnblogs.com/HK769405/p/14014071.html
Copyright © 2011-2022 走看看