Python六级考试笔记【源源老师】
六级标准
一、 掌握文件操作及数据格式化。
二、 掌握数据可视化操作。
三、 理解类与对象的概念,初步掌握类与对象的使用。
四、 掌握SQLite数据库基础编程。
五、 掌握简单的使用tkinter的GUI设计。
1. 文件操作
(1)文件的编码
- 编码就是一种规则集合,记录了内容和二进制间进行相互转换的逻辑。计算机只认识0和1,所以需要将内容翻译成0和1才能保存在计算机中。编码有许多中,我们最常用的是UTF-8编码。比如,使用UTF-8编码将“我喜欢你”编码成101110111。
(2)文件的解码
- 解码是编码的逆过程,即将编码后的数据还原为原始格式或表示。解码会将计算机保存的0和1,反向翻译回可以识别的内容。比如,使用将上面的101110111通过UTF-8解码为汉字:我喜欢你。
(3)文件的读取
-
内存中存放的数据在计算机关机后就会消失。要长久保存数据,就要使用硬盘、光盘、U 盘等设备。为了便于数据的管理和检索,引入了“文件”的概念。
-
一篇文章、一段视频、一个可执行程序,都可以被保存为一个文件,并赋予一个文件名。操作系统以文件为单位管理磁盘中的数据。一般来说,文件可分为文本文件、视频文件、音频文件、图像文件、可执行文件等多种类别。
-
在日常生活中,文件操作主要包括打开、关闭、读、写等操作。
(4)文件的写入
(5)文件的追加
(6)文件操作综合案例
2. 数据可视化
3. 类
(1)类的来源/作用
- 在计算机中,使用类可以做到与生活中的一样,设计表格(设计类)、打印表格(创建对象)、填写表格(对象属性赋值)的形式来组织数据。
#1.设计一个类(类比生活中:设计一张登记表)
class Student:
name = None
gender = None
nationnality = None
native_place = None
age = None
#2.创建一个对象(类比生活中:打印一张登记表)
stu_1 = Student()
#3.对象属性进行赋值(类比生活中:填写表单)
stu_1.name = '小明'
stu_1.gender = '男'
stu_1.nationnality = '中国'
stu_1.native_place = '广东深圳'
stu_1.age = 12
#4.获取对象中的信息
print(stu_1.name)
print(stu_1.gender)
print(stu_1.nationnality)
print(stu_1.native_place)
print(stu_1.age)
(2)类的定义和使用
- 类的使用语法:
- 成员变量和成员方法:
- 成员方法的定义:
"""
演示面向对象类中的成员方法定义和使用
"""
# 定义一个带有成员方法的类
class Student:
name = None # 学生的姓名
def say_hi(self):
print(f"大家好呀,我是{self.name},欢迎大家多多关照")
def say_hi2(self, msg):
print(f"大家好,我是:{self.name},{msg}")
stu = Student()
stu.name = "周杰轮"
stu.say_hi2("哎哟不错哟")
stu2 = Student()
stu2.name = "林俊节"
stu2.say_hi2("小伙子我看好你")
(3)类和对象
-
基于类创建对象的语法:
对象名 = 类名称()
类只是一种程序内的设计图纸,需要基于图纸生产出实体对象,才能正常工作,这个过程称之为:面向对象编程。例如,下面闹钟的例子:
"""
演示类和对象的关系,即面向对象的编程套路(思想)
"""
# 设计一个闹钟类
class Clock:
id = None # 序列化
price = None # 价格
def ring(self):
import winsound
# 播放一个音调为 2000 Hz,持续 3 秒的蜂鸣声
winsound.Beep(2000, 3000)
# 构建2个闹钟对象并让其工作
clock1 = Clock()
clock1.id = "003032"
clock1.price = 19.99
print(f"闹钟ID:{clock1.id},价格:{clock1.price}")
# clock1.ring()
clock2 = Clock()
clock2.id = "003033"
clock2.price = 21.99
print(f"闹钟ID:{clock2.id},价格:{clock2.price}")
clock2.ring()
(4)构造方法
- 成员变量(属性)的赋值
-
构造方法:
-
构造方法注意事项:
"""
演示类的构造方法
"""
# 演示使用构造方法对成员变量进行赋值
# 构造方法的名称:__init__
class Student:
def __init__(self, name, age ,tel):
self.name = name
self.age = age
self.tel = tel
print("Student类创建了一个类对象")
stu = Student("周杰轮", 31, "18500006666")
print(stu.name)
print(stu.age)
print(stu.tel)
(5)魔术方法
"""
演示Python内置的各类魔术方法
"""
class Student:
def __init__(self, name, age):
self.name = name # 学生姓名
self.age = age # 学生年龄
# __str__魔术方法:当你打印一个对象时,这个方法会被调用。它返回了一个字符串,包含学生的姓名和年龄。
def __str__(self):
return f"Student类对象,name:{self.name}, age:{self.age}"
# __lt__魔术方法:当你将两个对象进行“<”或者“>”的比较,这个方法会被调用
def __lt__(self, other):
return self.age < other.age
# __le__魔术方法:当你将两个对象进行“<=”或者“>=”的比较,这个方法会被调用
def __le__(self, other):
return self.age <= other.age
# __eq__魔术方法:如果这个方法不写,两个对象用“==”,比较的是内存地址;如果写了,按 __eq__方法实际情况做比较
def __eq__(self, other):
return self.age == other.age
stu1 = Student("周杰轮", 31)
stu2 = Student("林俊节", 36)
print(stu1)# Student类对象,name:周杰轮, age:31
print(stu1 < stu2)# True
print(stu1 <= stu2)# True
print(stu1 == stu2)# False
(6)面向对象
面向对象:它是许多编程语言都支持的一种编程思想,简单理解就是,基于模板(类)去创建实体(对象),使用对象完成功能的开发。面向对象三大特性:封装、继承、多态。
【1】封装
-
封装:将现实世界事物的属性和行为,封装到类中,描述为成员变量和成员方法,从而完成程序对现实世界事物的描述。
-
私有成员:在现实世界中,有些属性和行为是不公开的,没有开放给用户,在类中也提供了私有成员的形式来支持,即私有成员变量、私有成员方法。定义私有成员的方法如下:
-
私有成员变量:变量名以__开头(双下划线)
-
私有成员方法:方法名以__开头(双下划线)
-
【注意】:私有变量无法被类对象直接读取或者赋值,私有方法无法被类对象直接使用。只有类中的其他成员访问私有成员。
"""
演示面向对象封装思想中私有成员的使用
"""
# 定义一个类,内含私有成员变量和私有成员方法
class Phone:
__current_voltage = 0.5 # 当前手机运行电压 (__current_voltage:私有成员变量)
def __keep_single_core(self): # (__keep_single_core:私有成员方法)
print("让CPU以单核模式运行")
def call_by_5g(self):
if self.__current_voltage >= 1:
print("5g通话已开启")
else:
self.__keep_single_core()
print("电量不足,无法使用5g通话,并已设置为单核运行进行省电。")
phone = Phone()
# print(phone.__current_voltage) # 报错,私有变量无法被类对象直接读取或者赋值
# phone.__keep_single_core # 报错,私有方法无法被类对象直接使用
phone.call_by_5g() # 类中的其他成员访问私有成员
【2】继承
继承:从父类继承(复制)过来成员变量和成员方法(不含私有),继承分为单继承和多继承。
- 单继承:一个子类继承一个父类
# 演示单继承
class Phone:
IMEI = None # 序列号
producer = "ITCAST" # 厂商
def call_by_4g(self):
print("4g通话")
class Phone2022(Phone):
face_id = "10001" # 面部识别ID
def call_by_5g(self):
print("2022年新功能:5g通话")
phone = Phone2022()
print(phone.producer) #ITCAST
phone.call_by_4g() #4g通话
phone.call_by_5g() #2022年新功能:5g通话
- 多继承:一个子类继承多个父类
【注意】:多个父类中,如果有同名成员,默认谁先继承,谁的优先级更高。
# 演示多继承
class Phone:
IMEI = None # 序列号
producer = "ITCAST" # 厂商
def call_by_4g(self):
print("4g通话")
class NFCReader:
nfc_type = "第五代"
producer = "HM"
def read_card(self):
print("NFC读卡")
def write_card(self):
print("NFC写卡")
class RemoteControl:
rc_type = "红外遥控"
def control(self):
print("红外遥控开启了")
class MyPhone(Phone, NFCReader, RemoteControl):
pass #pass表示占位语句,无内容的意思,保证函数的完整性
phone = MyPhone()
print(phone.producer) #ITCAST 【Phone和NFCReader都有该成员,默认谁先继承,谁的优先级更高】
phone.call_by_4g() #4g通话
phone.read_card() #NFC读卡
phone.write_card() #NFC写卡
phone.control() #红外遥控开启了
【扩展】:复写:即在子类中重新定义父类中的属性或方法。复写后,类对象调用成员后,会调用复写后的新成员。
class Phone:
IMEI = None # 序列号
producer = "ITCAST" # 厂商
def call_by_5g(self):
print("使用5g网络进行通话")
# 定义子类,复写父类成员
class MyPhone(Phone):
producer = "ITHEIMA" # 复写父类的成员属性
def call_by_5g(self): # 复写父类的成员方法
print("开启CPU单核模式,确保通话的时候省电")
phone = MyPhone()
print(phone.producer) #ITHEIMA
phone.call_by_5g() #开启CPU单核模式,确保通话的时候省电
如果还需要调用被复写的父类成员,需要使用特殊方式,如下:
方式一:父类名.
父类名.成员变量
父类名.成员方法
方式二:super().
super().成员变量
super().成员方法()
class Phone:
IMEI = None # 序列号
producer = "ITCAST" # 厂商
def call_by_5g(self):
print("使用5g网络进行通话")
# 定义子类,复写父类成员
class MyPhone(Phone):
producer = "ITHEIMA"
def call_by_5g(self):
print("开启CPU单核模式,确保通话的时候省电")
# 方式1
Phone.call_by_5g(self)
# 方式2
# super().call_by_5g()
phone = MyPhone()
phone.call_by_5g()
【3】多态
多态:多种状态,即完成某个行为时,使用不同的对象会得到不同的状态。
class Animal:
def speak(self):
pass
class Dog(Animal):
def speak(self):
print("汪汪汪")
class Cat(Animal):
def speak(self):
print("喵喵喵")
def make_noise(animal):
"""制造点噪音,需要传入Animal对象"""
animal.speak()
# 演示多态,使用2个子类对象来调用函数
dog = Dog()
cat = Cat()
make_noise(dog) #汪汪汪
make_noise(cat) #喵喵喵
- 抽象类:好比定义一个标准,包含一些抽象方法,要求子类必须复写父类的方法。比如,刚刚提到的Animal中的speak 方法,就是一个抽象类。
抽象类一般配合多态使用,获得不同的工作状态,再比如下面 的例子:
# 演示抽象类
class AC:
def cool_wind(self):
"""制冷"""
pass
def hot_wind(self):
"""制热"""
pass
def swing_l_r(self):
"""左右摆风"""
pass
class Midea_AC(AC):
def cool_wind(self):
print("美的空调制冷")
def hot_wind(self):
print("美的空调制热")
def swing_l_r(self):
print("美的空调左右摆风")
class GREE_AC(AC):
def cool_wind(self):
print("格力空调制冷")
def hot_wind(self):
print("格力空调制热")
def swing_l_r(self):
print("格力空调左右摆风")
def make_cool(ac):
ac.cool_wind()
midea_ac = Midea_AC()
gree_ac = GREE_AC()
make_cool(midea_ac) # 美的空调制冷
make_cool(gree_ac) # 格力空调制冷