一、模块相关概念
1、定义:包含一系列数据、函数、类的文件,通常以.py结尾。
2、作用:让一些相关的数据,函数,类有逻辑的组织在一起,使逻辑结构更加清晰。有利于多人合作开发。
3、模块导入方式(三种):
1)、import导入法:
2)、from import导入法:
3)、from import *导入法:
4、模块变量:
5、模块分类:
6、加载过程:
二、包相关概念
1、定义:将模块以文件夹的形式进行分组管理。
2、作用:让一些相关的模块组织在一起,使逻辑结构更加清晰。
3、导入方式(三种):
4、包中的__init__.py文件作用:是包内必须存在的文件,会在包加载时被自动调用。
5、__all__变量在导包中的作用:记录from 包import *语句需要导入的模块
三、异常处理相关概念:
1、异常:
1)、定义:运行时检测到的错误。
2)、 现象:当异常发生时,程序不会再向下执行,而转到函数的调用语句。
3)、常见异常类型:
2、处理:
1)、语法:
2)、raise语句:
3)、自定义异常:
四、基础语法代码:
代码1:
"""模块属性
# 练习: 将学生管理系统拆分为四个模块
# XXXModel ---> model 模型层
# XXXView ---> ui 表示层
# XXXController ---> bll 业务逻辑层
# 调用代码 ---> main 程序入口"""
from module01 import *fun01()#fun04()
#获取模块文档注释
importmodule01print(module01.__doc__)#获取模块文件路径
print(module01.__file__)#获取模块名称
print(module01.__name__) #模块名 __main_
代码2:
"""标准库模块 -- 时间"""
importtime#返回时间戳(1970年后经过的浮点秒数)#1555579061.7284493
print(time.time())#时间戳 --> 时间元组(年 月 日 时 分 秒 星期 一年的第几天 夏令时)
print(time.localtime(1555579061.7284493))#时间元组 --> 时间戳
print(time.mktime(time.localtime()))#时间元组 --> 字符串 (时间的格式化)#time.localtime() --> str
print(time.strftime("%Y %m %d %H:%M:%S", time.localtime()))print(time.strftime("%y %m %d %H:%M:%S", time.localtime()))#字符串 --> 时间元组
print(time.strptime("2019 04 14", "%Y %m %d"))
代码3:
importtime#练习1:定义函数, 输入年月日,返回星期.#星期一 星期二 星期三 ......
defget_week(year, month, day):
time_tuple= time.strptime("%d/%d/%d" % (year, month, day), "%Y/%m/%d")
weeks={
0:"星期一",1: "星期二",2: "星期三",3: "星期四",4: "星期五",5: "星期六",6: "星期日",
}#time_tuple[6] 从时间元组中获取星期数
return weeks[time_tuple[6]]print(get_week(2019, 4, 18))#练习2:定义函数:根据生日(年月日),返回活了多少天.#-- 根据年月日构建时间元组#-- 根据构建的时间元组获取时间戳#-- 使用当前时间戳 - 生日的时间戳#-- 将活的秒数换算为天
deflife_days(year, month, day):
time_tuple= time.strptime("%d/%d/%d" % (year, month, day), "%Y/%m/%d")#time.mktime( time_tuple)
life_seconds = time.time() -time.mktime(time_tuple)return life_seconds / 60 / 60 // 24
print(life_days(1984, 6, 11))
代码3:
"""包(文件夹)
# 练习1: 目标 -- 在实际项目结构中,随心所欲的调用不同模块成员.
# 1. 根据目录结构,创建相应的包与模块.
# 2. 在相应模块中,定义函数/类.
# 3. 在main中,调用skill_manager模块中成员
# 4. 在skill_manager模块中调用skill_deployer模块成员
# 5. 在skill_data模块中,调用list_helper模块成员."""
#python程序结构#包#模块#类#函数()/方法()#语句
## 方式1:import 包.模块#import package01.module01## 使用:包.模块.成员#package01.module01.fun01()
## 方式2:from 包 import 模块#from package01 import module01## 使用:模块.成员#module01.fun01()
## 方式3:#from package01 import *## 在包的__init__文件中,定义__all__ 属性#module01.fun01()
#[推荐]#from 包.模块 import 成员
from package01.module01 import *fun01()
代码4:
"""异常处理"""
defdiv_apple(apple_count):#分苹果
person_count = int(input("请输入人数:")) #ValueError
result = apple_count / person_count #ZeroDivisionError
print("每个人分类%d个苹果" %result)#缺点:不能根据具体错误,做出相应处理逻辑.#try:#div_apple(10)#except Exception as e: # 捕获所有类型的异常#print("分苹果失败啦")
#try:#div_apple(10)#except ValueError: # 捕获ValueError类型的异常#print("输入的人数有误")#except ZeroDivisionError: # 捕获ZeroDivisionError类型的异常#print("人数不能是零")#except Exception as e: # 捕获所有类型的异常#print("未知类型的错误")
try:
div_apple(10)except ValueError as e: #捕获ValueError类型的异常
print("输入的人数有误")except ZeroDivisionError: #捕获ZeroDivisionError类型的异常
print("人数不能是零")except Exception as e: #捕获所有类型的异常
print("未知类型的错误")else: #没有发生异常,执行的逻辑
print("分苹果成功喽")finally:print("无论是否发生异常,都执行的逻辑")print("后续逻辑.......")
代码5:
"""自定义异常
练习:成绩异常(1-100)"""
classAgeError(Exception):"""封装错误信息"""
def __init__(self,msg,code,age_value):
super().__init__(msg)
self.msg=msg
self.code=code
self.age_value=age_valueclassWife:def __init__(self,age):
self.age=age
@propertydefage(self):return self.__age@age.setterdefage(self,value):if 20 <= value <= 30:
self.__age =valueelse:#print("我不要")
#raise ValueError("我不要") # 人为抛出异常
raise AgeError("我不要",27,value)try:
w01= Wife(80)print(w01.age)exceptAgeError as e:print("错误信息:",e.msg)print("错误代码行号:",e.code)print("输入的年龄是:",e.age_value)
代码6:
defget_score():whileTrue:try:
number= int(input("请输入成绩:"))#except ValueError:
except:print("输入有误")continue #跳过本次循环
if 1<= number <= 100:returnnumberprint("成绩不在范围内")
get_score()
代码7:
"""学生管理系统 ui 界面----输入数据的异常处理
表示层"""
from bll import *
from model import *
classStudentManagerView:"""界面视图类"""
def __init__(self):#创建逻辑控制器对象
self.__manager =StudentManagerController()def __input_int(self, msg):whileTrue:try:returnint(input(msg))except:print("输入有误")def __input_students(self):#1. 在控制台中录入学生信息,存成学生对象StudentModel.
stu =StudentModel()
stu.name= input("请输入姓名:")#while True:
#try:
#stu.age = int(input("请输入年龄:"))
#break
#except:
#print("输入有误")
# #while True:
#try:
#stu.score = int(input("请输入成绩:"))
#break
#except:
#print("输入有误")
stu.age = self.__input_int("请输入年龄:")
stu.score= self.__input_int("请输入成绩:")#2. 调用逻辑控制器的add_student方法
self.__manager.add_student(stu)print(self.__manager)def __output_students(self, list_target):"""显示学生列表信息
:return:"""
#for stu in self.__manager.list_stu:
for stu inlist_target:#print(stu)
print("%d -- %s -- %d -- %d" %(stu.id, stu.name, stu.age, stu.score))def __output_student_by_score(self):"""根据成绩显示所有学生信息
:return:"""list_target= self.__manager.order_by_score()
self.__output_students(list_target)def __delete_student(self):#id = int(input("请输入需要删除的学生编号:"))
id = self.__input_int("请输入需要删除的学生编号:")if self.__manager.remove_student(id):print("删除成功")else:print("删除失败")def __modify_student(self):"""修改学生信息
:return:"""stu=StudentModel()#stu.id = int(input("请输入需要修改的学生编号:"))
stu.id= self.__input_int("请输入需要修改的学生编号:")
stu.name= input("请输入姓名:")#stu.age = int(input("请输入年龄:"))
#stu.score = int(input("请输入成绩:"))
stu.age = self.__input_int("请输入年龄:")
stu.score= self.__input_int("请输入成绩::")if self.__manager.update_student(stu):print("修改成功")else:print("更新失败")def __display_menu(self):"""显示菜单
:return:"""
print("1) 添加学生")print("2) 显示学生")print("3) 删除学生")print("4) 修改学生")print("5) 按照成绩降序排列")def __select_menu(self):"""选择菜单
:return:"""number= input("请输入选项:")if number == "1":
self.__input_students()elif number == "2":
self.__output_students(self.__manager.list_stu)elif number == "3":
self.__delete_student()elif number == "4":
self.__modify_student()elif number == "5":
self.__output_student_by_score()defmain(self):"""界面入口方法
:return:"""
whileTrue:
self.__display_menu()
self.__select_menu()