数据分析篇--Python基础篇--06异常与购物车

1.异常

1.异常
    异常是错误发生信号,一旦程序出错就会产生一个异常,如果该异常
    没有被应用程序处理,那么该异常就会抛出来,程序的执行也随之终止
    异常包含三个部分:
        1.异常的追踪信息 File "E:/PycharmProjects/pythonProject/图灵/day6/1.异常.py", line 8, in <module>
        2.异常的类型     NameError
        3.异常的信息     name 'aaa' is not defined
    错误分为两大类:
        1.语法上的错误:在程序运行前就应该立即修正,这个好避免
        2.逻辑上的错误:比如:字典没有key 你非要去key
                             列表没有索引非要取索引
                             变量没有名字等等
2.为何要处理异常
    避免程序因为异常而崩溃,所以在应用程序中应该对异常进行处理,从而增强程序的健壮性
3.如何处理异常
try:
    代码1
    代码2
    代码3
    .........
except NameError:
    当抛出的异常时NameError时执行的子代码块
except ......:
    pass
else:
    pass

常见异常

# NameError
aaa                 

# TypeError
print(1+'1')        

# KeyError
d = {'x':1,'y':2}       
d['z']

# IndexError
L = [1,2]              
L[2]

异常处理的单分支

try:
    a = 1
except NameError as f:
    print('检查您的代码')
    print(f)
else:
    # 程序没有抛出异常的时候执行
    print('代码正确')
finally:
    # 不管有错没错  一定会执行的部分
    print('完成了异常捕获')

异常处理的多分支

try:
    a
    print('============')
    print('============')
    print('============')
    print('============')
    L = [1,2]
    L[2]
except NameError as f:
    # 一旦捕获到异常
    # 下面这些print都不会执行
    # print('============')
    # print('============')
    # print('============')
    # print('============')
    print('检查您的代码')
    print(f)
except IndexError as f:
    print('检查您的代码')
    print(f)
else:
    # 程序没有抛出异常的时候执行
    print('代码正确')
finally:
    # 不管有错没错  一定会执行的部分
    print('完成了异常捕获')

合并

try:
    a
    print('============')
    print('============')
    print('============')
    print('============')
    L = [1,2]
    L[2]
except (NameError,IndexError) as f:
    # 一旦捕获到异常
    # 下面这些print都不会执行
    # print('============')
    # print('============')
    # print('============')
    # print('============')
    print('检查您的代码')
    print(f)

else:
    # 程序没有抛出异常的时候执行
    print('代码正确')
finally:
    # 不管有错没错  一定会执行的部分
    print('完成了异常捕获')

万能捕获

try:
    a
    print('============')
    print('============')
    print('============')
    print('============')
    L = [1,2]
    L[2]
except Exception as f:
    # 一旦捕获到异常
    # 下面这些print都不会执行
    # print('============')
    # print('============')
    # print('============')
    # print('============')
    print('检查您的代码')
    print(f)

else:
    # 程序没有抛出异常的时候执行
    print('代码正确')
finally:
    # 不管有错没错  一定会执行的部分
    print('完成了异常捕获')

自定义异常

L = [1,2,3,4,5]
print(len(L))
# # 第一种方式  满足条件抛出异常
# if len(L) != 5:
#     raise TypeError('列表的长度必须为4,这个是我的规则')
# 第二种方式   断言
assert len(L) == 4

2.购物车

import time
# time.sleep(5)
# print('我休息了5秒钟')
from typing import List, Union

user_dic = {
    'name':'张晰',        # 用户名
    'password':'123',     # 密码
    'locked':False,     # 锁定状态
    'account':50000,    # 余额
    'shopping_cart':{}    # 购物车字典
}

# 登录函数
def login():
    '''
    登录函数,密码输入错误3次锁定5秒,用户名输入错误可以一直输入
    :return:
    '''
    print('请登录')
    count = 0
    while True:
        name = input('请输入用户名').strip()       # .strip()  去空格
        if user_dic['locked']:
            # 这个是锁定状态才会进来if判断   user_dic['locked']一定是True
            print('密码输入错误3次锁定5秒,请5秒后重新登录')
            time.sleep(5)
            user_dic['locked'] = False
            count = 0
        if name == user_dic['name']:
            # pass
            pwd = input('请输入密码').strip()
            if pwd == user_dic['password'] and user_dic['locked'] == False:
                print('登陆成功')
                break
            else:
                count += 1
        else:
            print('用户名不存在')
        if count >= 3:
            user_dic['locked'] = True

# # 登录装饰器
def login_intter(func):
    def wrapper():
        login()
        func()
    return wrapper

# login()

def shopping():
    print('购物')
    goods_list = [
        ['coffee',30], # 0
        ['chicken',20], # 1
        ['iPhone',10000], # 2
        ['car',100000], # 3
        ['buliding',200000] # 4
    ]
    shopping_cart = {}   # 自己的购物车
    cost_money = 0      # 花费的钱
    while True:
        # 展示商品
        # 枚举 enumerate
        for i,item in enumerate(goods_list):
            # i 是列表的索引号
            # item是列表里面的数据
            print(i,item)
        choice = input('请输入商品对应编号,按t键结账').strip()
        if choice.isdigit():
            # 判断字符串是否是数字
            # 进入了这个里面,字符串您的数字
            # print('是数字')
            # 现在输入的是字符串的数字
            choice = int(choice)
            # 否定的条件 不能是那些数字
            if choice < 0 or choice >= len(goods_list):
                print('请输入相应的编号')
                continue
            # print('这个是合法的数字')
            # print(goods_list[choice])
            # # 商品
            # print(goods_list[choice][0])
            # # 价格
            # print(goods_list[choice][1])
            # 商品
            goods_name = goods_list[choice][0]
            # 价格
            goods_price = goods_list[choice][1]
            # 用户的余额大于等于商品的价格  才能购物
            if user_dic['account'] >= goods_price:
                if goods_name in shopping_cart:
                    # 'coffee': {'price': 30,'count':1}
                    # print('您又输入了同样的商品')
                    # print(shopping_cart[goods_name])
                    shopping_cart[goods_name]['count'] += 1
                    shopping_cart[goods_name]['price'] = shopping_cart[goods_name]['count'] * goods_price
                # 一个商品购买过   'coffee': {'price': 30, 'count': 1}
                # 第一次购买将进入else
                else:
                    shopping_cart[goods_name] = {'price':goods_price,'count':1}
                # print(shopping_cart)
                # 账户的金额 = 账户的金额 - 商品的价格
                user_dic['account'] -= goods_price
                # 花费的金额 = 花费的金额(一开始是0)+ 商品的价格
                cost_money += goods_price
                # 提示用户这一次你加入购物车的商品名字
                print('%s新的商品'%goods_name)
            else:
                print('钱不够')

        # 结账部分
        elif choice == 't':
            print('结账')
            print(shopping_cart)
            buy = input('买不买(y/n)>>>>').strip()
            if buy == 'y':
                if cost_money == 0:
                    print('不买只看')
                    break
                # 把购物车的信息存到用户信息里面去
                user_dic['shopping_cart'] = shopping_cart
                print()

        else:
            print('非法输入')
shopping()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

spiders小张

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值