[python全栈]02.python基础[part III](3)

目录

  1. all 列表
  2. 包的相对导入、加载路径
  3. 异常
  4. try except语句
  5. try finally语句
  6. raise语句
  7. assert语句
  8. 小结

1. all 列表

包的__init__.py 文件内的  __all__ 列表 :
作用:
	用来记录此包中哪些子包或模块在用 from 包名import *语句导入时被导入
说明:
	__all__列表只对 from 包名import *语句起作用
用法 : 在__init__.py 文件内写入 __all__ = ["模块1","模块2"..."属性1","属性2"...]

2. 包的相对导入、加载路径

包的相对导入 :
	包的相对导入是指包内模块的相互导入	!!!包内模块的互相导入!!!
语法 :
	from 相对路径包或模块 import属性或模块名
	或:
	from 相对路径包或模块 import *
相对路径 :
	. 		代表当前目录
	..		代表上一级目录
	...		代表上两级目录
	....	以此类推
	注: 相对导入不能超出包的外部
用法 :
    mypack/
        __init__.py
        menu.py
        games/
            __init__.py
            contra.py
            supermario.py
            tanks.py
        office/
            __init__.py
            excel.py
            word.py
--------------------- 
	import mypack.games.contra as contra
	#使用相对路径调用menu.py模块内的show_menu函数:
	from ..menu import show_menu
	#使用绝对路径调用menu.py模块内的show_menu函数:
	from pack.menu import show_menu
包的加载路径 :
	和模块的加载路径相同,但没有系统内建包 :
	1. 当前文件夹
	2. sys.path 给出的路径

3. 异常

错误 Error :
	错误是指由于逻辑或语句等导致一个程序无法正常执行的问题
	特点:
		有些错误是无法预知的
异常 exception :
	异常是程序出错时标识的一种状态 (错误引起异常)
	当异常发生时,程序不会再向下执行,而转去调用此函数的地方
	等待处理此错误并恢复为正常状态
异常的作用 :
	1.通知上层调用者有错误产生需要处理
	2.用作信号

4. try except语句

try except 语句
语法 :
-------------------------------------------------
		try :
			可能触发异常的语句			#可能出错的地方,如果出错进入except语句
		except	错误类型1 [as 变量1]:	#至少有一个except语句块
			异常处理语句1
		except	错误类型2 [as 变量2]:
			异常处理语句2
		except	(错误类型3,错误类型4)... [as 变量3]:
			异常处理语句3
		...
		except :
			异常处理语句 other		#捕获其他未指明的异常
		else :
			未发生异常时执行的语句	#else,finnally可以没有
		finally :
			最终执行语句				#子句一定会被执行 无论是否异常都会被执行的语句
-------------------------------------------------
作用: 尝试捕获异常,将程序转为正常状态并继续执行
语法说明:
   as 子句是用于绑定错误对象的变量,可以省略不写
   except子句可以有一个或多个,但至少要有一个
   else子句最多只能有一个,也可以省略不写
   finally子句最多只能有一个,也可以省略不写
eg :
def div_apple(n) :
	print('%d个苹果您想分给几个人?' % n)
	s = input('请输入人数 ')
	cnt = int(s) #<<=可能触发ValueError错误异常
	#<<=可能触发 ZeroDivisionError错误异常 
	result = n / cnt 
	print('每个人分了',result,'个苹果')

#以下是调用者
#用try-except语句来捕获并处理ValueError类型的错误
try :
        print('开始分苹果')
        div_apple(10)
        print('分苹果完成')
except ValueError :
        print('div_apple内部出现ValueError错误,已处理')
        print('用户输入不合法')
except ZeroDivisionError :
        print('div_apple内部出现ZeroDivisionError错误,已处理')
        print('用户输入不合法')
#except (ValueError,ZeroDivisionError):
#       print('出现错误,已处理')
else :
		print('程序正常执行')
finally :
		print('finally子句一定会被执行')
print('程序正常退出')

练习 :

'''
函数get_score()来获取学生的成绩(0~100),如果输入出现异常,则返回0,
否则返回用户输入的成绩
'''
####方法1
def get_score() :
        s = int(input('请输入学生额成绩(0~100),-1结束输入'))
        if 0<= s <=100 :
            return s
        return 0
try :
    score = get_score()
except :
    score = 0
print('score = ',score)
####方法2
def get_score() :
    try :
        s = int(input('请输入学生额成绩(0~100),-1结束输入'))
    except:
        return 0
    if 0 <= s <= 100:
        return s
    return 0
score = get_score()       
print('score = ',score)

5. try finally语句

try-finally语句
  语法:
  -------------------------------
    try:
        可能触发异常的语句
    finally:
        最终语句
  -------------------------------
  说明:
    finally 子句不可以省略
    一定不存在except子句
  作用:
    通常用try-finally语句来做触发异常时必须要处理的事情,无论异常是否发生,finally子句都会被执行
  注:
    try-finally语句不会改变程序的(正常/异常)状态

应用场景

def fry_egg :
	print('打开天然气')
	try :
		n = int(print('请输入煎蛋个数'))
		print('煎蛋数为: ',n)
	finally :
		print('天然气关闭')
fry_egg()
#不论程序运行出现什么错误,最后天然气都会被关闭

6. raise语句

try-except 用来接受错误通知并将程序转为正常状态
错误通知如何发出 ?
raise 语句
  作用:
    触发一个错误,让程序进入异常状态
  语法:
    raise 异常类型
    或
    raise 异常对象	
eg : 使用raise+异常类型 发出异常通知并由try-except捕获处理
def make_except():
	print('开始')
	raise ValueError
	print('结束')
try :
	make_except()
except ValueError :
	print('try-except接收到异常')
print('make_except调用结束')
#
>>开始
>>>try-except接收到异常
>>>make_except调用结束
#使用异常对象构造异常通知
def make_except():
	print('开始')
	e = ValueError('ValueError')	
	#e为异常对象,ValueError()为函数
	raise e		#触发e绑定的错误
	print('结束')
try :
	make_except()
except ValueError :
	print('try-except接收到异常')
print('make_except调用结束')

7. assert语句

assert 语句(断言语句)
  语法:
    assert 真值表达式, 错误数据(通常是字符串)
  作用:
    当真值表达式为False时,用错误数据创建一个 AssertionError 类型的错误,并进入异常状态
  类似于:
    if 真值表达式 == False:
        raise AssertionError(错误数据)
 eg :  assert语句用法
def get_age():
	a = int(input('请输入年龄: '))
	assert 0<=a<=140 ,'年龄不在合法范围内'
	#当 0<= a <= 140 为False时,返回AssertionError错误类型
	return a
age = get_age()
print('age = ',age)

8. 小结

小结:
  接收错误消息:
    try-except
  做必须要处理的事情的语句:
    try-finally
  发错误消息的语句:
    raise 语句
    assert 语句
###为什么要用异常处理机制###
  在程序调用层数较深时,
  向主调函数传递错误信息需要用return语句层层传递比较麻烦,
  所以用异常处理机制
eg : 以建房为例,示意什么情况下使用异常处理机制
def f1() :	
	print('开始打地基')
	print('.....')
	print('地基建完')
	return 0
def built_house():
	...

built_house()	#开始建房
 
  

练习 :

'''一个球100米高空落下,每次落下后反弹高度是原高度的一半,再落下,
  写程序
    1) 算出皮球在第10次落地后反弹高度是多少,
    2) 打印出球共经过了多少米的路程 '''
def ball(height,times):
        for _ in range(times):
                height /= 2
        return height
print('球从100米反弹10次后高度是,',ball(100,10))
def ball_instance(height,times):
        s = 0
        for _ in range(times):
                s += height #把下落高度求出来
                height /= 2
                s+=height #把反弹高度累加到s
        return s
print('球从100米反弹10次后总共走了,',ball_instance(100,10),'米')
'''分解质因数,输入一个正整数,分解质因数:
     如:
       输入: 90
       打印:
           90=2*3*3*5
    (质因数是指最小能被原数整数的素数(不包括1))
思路 :
#1.先将小于n所有素数取出
#2.从小到大遍历除,找到能除尽的,返回n除该素数后的数
#3.一直除成素数,结束
'''
def isprime(n): #判断是否为素数
        a=0
        if n < 2 :
                return False 
        for i in range(2,n):
                if n%i==0 :
                        a+=1
        if a > 0 :
                return False
        return True

def primes(n):  #取出小于n的素数
        L = []
        for i in range(2,n):
                if isprime(i) :
                        L.append(i)
        return L

def solve(n) :
        L = []
        if isprime(n):
                L.append(str(n))
                return L
        while isprime(n)==False:
                p = primes(n)
                for i in p :
                        if n%i==0:
                                L.append(str(i))
                                n = int(n/i)
                                if isprime(n):
                                        L.append(str(n))
                                        return L
                                continue
        return L

if __name__ == '__main__':
        n = int(input('请输入要分解的整数 :') )  
        s = sorted(solve(n))
        s2 = '*'
        s0 = s2.join(s)	#使用 s.join()函数
        print(n,'=',s0)
def is_prime(x):
    '''判断 x是否为素数'''
    if x <= 1:
        return False
    for i in range(2, x):
        if x % i == 0:
            return False
    return True

def get_prime_list(n):
    '''此函数根据给定一个整数,返回此整数所有因数的列表'''
    # 如何用n求出所有的因数
    L = []  # 用来存放所有因数(素数)
    # 如果n不是素数,我们就拆出因数出来
    while not is_prime(n):
        # 把n拆出来一个素数因数,然后继续循环
        # 找n的一个因数:
        for x in range(2, n):
            if is_prime(x) and n % x == 0:
                # x一定是n的因数
                L.append(x)
                n /= x  # 下次再求n的因数
                n = int(n)  # 转为整数
                break
    else:
        L.append(n)
    return L

if __name__ == '__main__':
    n = int(input("请输入整数: "))
    print(get_prime_list(n))  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值