python基础-day15

day14回顾:
自定义模块:
    模块名:(标识符)
        全局变量将成为模块的属性
    导入方式:
        import 语句
        from import 语句
        from import *语句
    
    搜索:
        1.内建模块
        2.搜索当前工作路径
        3. sys.path提供的路径
    import mypod #执行 mypod.py
    mypod.py --->---mypod.pyc----->python

模块内的序置属性
    __doc__属性
    __file__属性
    __name__属性

    __all__列表
        from import *语句(只导入all列表内的)

    隐藏属性
    以_开头的标识符在from import *语句导入时不会被导入

    random 模块

包 pack
    包的导入:
        import 语句 (不能使用相对导入))
            import 包位置 
        from import 语句
            from 包位置 import 子包/模块/属性
                绝对位置 mypack.menu
                相对位置 ..menu
       from import *语句
            from 包位置 import *

__init__.py (所有包必须有的)
    文档字符串
    函数
    __all__列表

------------------------------------------------------------
day15
异常(基础) exception
什么是错误:
    错误
    错误是指由于逻辑或语法等导致一个程序无法正常执行的问题

什么是异常
    异常是程序出错时标识的一种状态
    当异常发生时,程序不会再向下执行,而转去调用此函数的地方待处理此错误并恢复为正常状态
    作用:
        用作信号,通知上层调用者有错误产生需要处理

try语句:
    两种语法:
        try-except 语句
        try-finally 语句

    try-except 语句
        语法:(至少有1个except)
            try:
                可能触发异常的语句
            except 错误类型1 [as 变量名1]:
                异常处理语句1
            except 错误类型2 [as 变量名2]:
                异常处理语句2
            except (错误类型3,错误类型4) [as 变量3]:
                异常处理语句3
            except:
                异常处理语句other
            else:
                未发生异常语句
            finally:
                最终语句
        作用:
            尝试捕获异常通知,将程序由异常流程转为正常流程并继续执行
        说明:
            except 子句可以有一个或者多个,但至少有一个
        
    示例见:
                def div_apple(n):
                    print('现在有%d个苹果,你想分给几个人?'%n)
                    s=input('请输入人数:')
                    count=int(s)
                    result=n/count
                    print('每个人分了%d个苹果' % result)
                try:
                    div_apple(10)
                except (ValueError):
                    print('没有人来拿苹果,苹果被收回')
                except:
                    print('有错误,程序已经自动转化为正常运行!')
                print('程序正常结束!')    
                finally:
                    print('我一定会被执行!!!')
                print('程序正常结束!')

练习:
    写一个函数get_score()来获取学生输入的成绩(0~100)的数,如果用户输入的不是0~100的数
    则返回0,否则返回输入的整数
                def get_score():
                    try:
                        s=int(input('输入一个数'))
                    except:
                        return 0
                    if not 0<=s<=100:
                        return 0
                    return s
                score=get_score()
                print(score)

try-finally 语句:
    语法:
        try:
            可能触发异常的语句
        finally:
            最终语句
    说明:
        finally 子句不可以省略
        一定不存在except 子句
    作用:
        1.通常用try-finally 语句来做触发异常时必须要处理的事情,无论异常是否发生
        finally子句都会被执行
        2.try-finally 语句不会改变程序的(正常/异常)状态
    示例:
        try-finally.py
            def fry_egg():
                print('打开天然气')
                try:
                    count=int(input('请输入鸡蛋个数'))
                    print('煎鸡蛋,共煎了%d个鸡蛋'% count)
                finally:
                    print('关闭天然气')
            try:
                fry_egg()
            except:
                print('煎鸡蛋异常,已经转为正常')        

raise语句:
    作用:
        出发一个错误,让程序进入异常状态 
        发送错误通知给调用者
    语法:
        rasie 异常类型
        或
        rasie 异常对象
        或
        raise #重新触发上一次异常
    示例见raise.py
        def fa():
            print('fa--开始')
            raise ValueError('故意制造了一个错误')
            print('fa--结束')
        def fb():
            print('fb--开始')
            try:
                fa()
            except ValueError as err:
                print('fa里发生了值错误已处理')
                raise
            print('fb--结束')
        try:
            fb()
        except:
            print('再次收到fb的错误')

练习:
    写一个函数get_age()用来获取一个人的年龄信息,规定只能输入1~140之间的整数,如果输入的是
    其他的数值,则直接触发ValueError类型的错误!
        def get_age():
            try:
                a=int(input('请输入一个数'))
                if not 1<=a<=140:
                    raise ValueError
            except ValueError:
                print('获取年龄失败')
        get_age()            

assert语句(断言语句)
    语法:
        assert 真值表达式,错误数据(通常是字符串)
    作用:
        当真值表达式为False时,用错误数据创建一个AssertionError类型的错误
        并进入异常状态
    等同于:
        if bool (真值表达式)==False:
            raise assertionError(错误数据)
    示例见:assert.py
            def get_score():
                s=int(input('请输入成绩'))
                assert 0<=s<=100, '成绩超出范围'
                return s
            try:
                score=get_score()
            except AssertionError as err:
                print('AssertionError类型的错误被触发,且已捕获')
                print('err=',err)

小结:
    异常处理的相关的语句:
        try-except 语句:
        作用:
        捕获异常通知,将程序由异常状态转为正常状态
    try-finally 语句
        作用:
            执行必须要执行的语句
    raise 语句
        作用:
            触发异常(抛出异常),让程序进入异常流程
    assert 语句
        作用:
            根据条件来触发AssertionError类的异常,并进入异常流程

    
迭代器  Iterator
    什么是迭代器
        迭代器是访问可迭代对象的工具、
        迭代器是指用iter(obj)函数返回的对象(实例)
        迭代器可以用next(it)函数获取可迭代对象的数据
迭代器函数:
    iter(iterable)从可迭代对象中返回一个迭代器,iterable 必须是能提供一个迭代器的对象
    next(iterator)从迭代器iterator中获取下一个记录,如果无法获取下一条记录,则触发
    StopIterator异常通知
说明:
    迭代器只能往前取值,不会退后

示例:
    L=[1,3,5,7]
    it=iter(L)      # 让iter函数从L中获取迭代器
                    # it 绑定的是迭代器
    print(next(it)) # 1
    print(next(it)) # 3
    print(next(it)) # 5
    print(next(it)) # 7


示例:
    #用迭代器和while来代替for循环语句
    示例:
            l=[2,3,5,7]
            it=iter(l)
            while True:
                try:
                    x=next(it)
                    print(x)
                except StopIteration:
                    break

练习:
    有一个集合:
    s={'唐僧','悟空','八戒','沙僧'}
    用for 循环遍历所有元素如下:
    for x in s:
        print(x)
    else:
        print(遍历结束)
    用while和迭代器改写
        s={'唐僧','悟空','八戒','沙僧'}
        it=iter(s)
        while True:
            try:
                x=next(it)
                print(x)
            except StopIteration:
                break


练习:
    1.一个球从100米高空落下,每次落地后反弹高度为原高度的一半再落下
        1)算出皮球在第10次落地后反弹多高
        2)打印10次后球共经过多少米路程
    2.分解质因素,输入一个正整数,分解质因素.
        如输入:90 则打印:  90=2*3*3*5
        (质因素是指最小能被原数整除的素数(不包括1))
        




























评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值