侧边栏壁纸
博主头像
Aec站点~冲冲冲 博主等级

行动起来,活在当下

  • 累计撰写 19 篇文章
  • 累计创建 1 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

python 学习

小葱~
2025-01-28 / 0 评论 / 0 点赞 / 70 阅读 / 0 字

变量字符串

代码 type() 可以查看数据类型

1738067723523.png

变量类型转换

image.png

num_str = str(11)

print(type(num_str))

运算符image.pngimage.png

占位符
image.png

image.png

快捷格式化字符串

image.png

表达式格式化

image.png

image.png

输入input

print("请告诉我你是谁")
name = input()
print(f"我是{name}")
name = input("请告诉我你是谁?")
print(f"我是{name}")

image.png

判断

布尔 True表示为真 False表示为假

image.png

if语句

age = input("请输入您的年龄")
if int(age) >= 18:
    print("您已成年,请补10元钱")
print("玩的快乐")
age = input("请输入您的年龄")
if int(age) >= 18:
    print("您已成年,请补10元钱")
else:
    print("您未成年 免费")
age = input("请输入您的年龄")
if int(age) >= 18:
    print("您已成年,请补10元钱")
elif int(age) >= 50:
    print("您年纪大 免费")
else:
    print("您未成年 免费")

随机数

import random
num = random.randint(1,10)

随机生成1-10的随机数给num

循环

while循环

image.png

i = 0
while i < 100:
    print("小美我喜欢你")
    i += 1

image.png

i = 1
while i <= 9:
    j = 1
    while j <= i:
        # /t隔开呢欧容  end= 不换行
        print(f"{j} * {i} = {j * i}\t",end='') 
        j += 1
    i += 1
    print()

for循环

image.png

python里for就是遍历循环

range语句

for x in range(10):
    print(x)

image.png

加上嵌套

i = 1
for i in range(1,101):
    print(f"今天是表白的第{i}天")
    for j in range(1,11):
        print(f"今天是表白的第{i}天,送的第{j}朵玫瑰")
print(f"表白的第{i}天,成功了")

循环中断

continue关键字用于:中断本次循环,直接进入下次循环 可以控制内循环中断

break关键字用于:直接结束循环 可以加上判断 正确之后直接结束循环

小案例
qian = 8000 
for i in range(1,20):
    import random
    num = random.randint(1,10)
    if qian == 0:
        print("账户余额为0,钱不够了下个月再领取把.")
        break
    if num >= 5:
        qian = qian - 1000
        print(f"员工{i},绩效分{num},发放工资1000元,账户剩余余额{qian}")
    elif num < 5:
        print(f"员工{i},绩效分{num},绩效太低了,不发放工资")

函数

基础

函数是组织好的,可重复使用的,用来实现特定功能的代码段。

len()统计长度的函数

函数:

image.png

# 函数
def sat_ho():
    print("nihao")
# 调用
sat_ho()

先定义 后使用

#这是调用参数
def add(num1,num2):
    num3 = num1 + num2
    print(f"两个数字相加是{num3}")
add(18,15)
#加上返回值
def add(num1,num2):
    num3 = num1 + num2
    return num3
print(add(12,15))

return关键词返回~~~~~

返回之后函数后面的命令就不执行了

None类型

思考:如果函数没有使用return语句返回数据,那么函数有返回值吗?实际上是:有的。

Python中有一个特殊的字面量:None,无返回值的函数,实际上就是返回了:None这个字面量

image.png

在函数里面的设置 想要用全局变量的话需要加上global这个关键字

global

num4 = 500 
def add(num1,num2):
    global num4
    num4 = 600
    num3 = num1 + num2 + num4
    return num3
print(add(12,15))
print(num4)

image.png

小练习

# 初始化用户信息
print("你叫啥名字啊")
name = input()  # 获取用户姓名
yue = 5000000  # 初始账户余额(单位:元)

def chaxun():
    """余额查询功能"""
    print("---------------------余额查询---------------------")
    # 使用f-string格式化输出余额信息
    print(f"{name}, 您好,您的余额剩余:{yue}元\n")

def cunkuan():
    """存款业务处理"""
    global yue  # 声明使用全局变量以修改余额
    
    print("---------------------存款---------------------")
    try:
        # 尝试将用户输入转换为整数(可能引发ValueError)
        cun = int(input("请输入要存的金额:"))
        yue += cun  # 更新余额
        
        # 操作结果反馈
        print(f"您存款{cun}元成功")
        print(f"您的余额剩余:{yue}元\n")
    except ValueError:
        # 处理非数字输入异常
        print("错误:请输入有效的数字金额!\n")

def qvkuan():
    """取款业务处理"""
    global yue  # 声明使用全局变量
    
    print("---------------------取款---------------------")
    try:
        qv = int(input("请输入要取的金额:"))
        
        # 校验取款金额合法性
        if qv <= 0:
            print("错误:取款金额必须大于0!\n")
            return  # 提前结束函数执行
            
        # 余额充足检查
        if yue >= qv:
            yue -= qv  # 更新余额
            print(f"您取款{qv}元成功")
            print(f"您的余额剩余:{yue}元\n")
        else:
            print("错误:余额不足!\n")
    except ValueError:
        print("错误:请输入有效的数字金额!\n")

# 主程序循环
while True:
    # 打印主菜单界面
    print("---------------------主菜单---------------------")
    print(f"{name},您好,欢迎来到黑马银行ATM机,请选择操作:")
    print("查询余额\t[输入1]")  # 使用制表符对齐
    print("存款\t\t[输入2]")
    print("取款\t\t[输入3]")
    print("退出\t\t[输入4]")
    # 获取用户操作选择(可能引发ValueError)
    shuru = int(input("请输入操作编号:"))
        
    # 根据输入执行对应操作
    if shuru == 1:
        chaxun()
    elif shuru == 2:
        cunkuan()
    elif shuru == 3:
        qvkuan()
    elif shuru == 4:
        # 退出系统
        print("退出成功,请取回您的银行卡!")
        break  # 跳出循环结束程序
    else:
        # 处理超出范围的数字输入
        print("错误:请输入1-4之间的有效编号!\n")

# 程序结束(循环外)

进阶

多个返回值

def duogefanhuizhi():
    return 1,2,3
x,y,z = duogefanhuizhi()
print(x)
print(y)
print(z)

多个传参种类

image.png

image.png

可变参数

image.png

以上穿元组 之类的 通过单个*来传送

image.png

以上传送字典 通过两个**来传送

函数串函数

image.png

lambda匿名函数

image.png

image.png

数据容器

image.png

list类型

image.png

索引

image.png

列表的操作方法

查找某元素的下标 .index(元素)

list.index(元素)

修改特定信标索引值的修改方法

list[1] = "新数据“

插入元素 .insert(下标,元素 )

list.insert(下标,元素 ) (后面的往后拍)

追加元素到尾部 .append(元素)

list.append(元素)

追加一批元素 (追加到最后).extend(其他数据容器)

list.extend(其他数据容器) (比如 list.extend(list2))

删除元素的语法
  1. del list[1] (这就删除了1下标的)

  2. list.pop(下表) (取出这个元素 能打印出来 也相当于删除了)

删除某元素在列表中的第一个匹配项 .remove(元素)

list.remove(元素) (比如 list.remove(liyus))

清空整个列表 .clear()

list.clear()

统计某个元素在列表中的数量 .count(元素)

list.count(元素)

统计列表中全部元素

len(列表)

image.png

image.png

遍历列表

while循环

image.png

my_list = [1,2,3,4,5]
i = 0
while i < len(my_list):
    yuansu = my_list[i]
    print(f"列表的元素:{yuansu}")
    i += 1

for循环

my_list = [1,2,3,4,5]
for i in my_list:
    print(f"您的元素是:{i}")

image.png

元组tuple()

元组的信息是不可以修改,也是可以存储多个不同类型的元素 相当于只读的list。

元组使用小括号定义 tuple()

# 创建方式
t1 = (1,2,3,4,5)
t2 = ()
t3 = tuple() 
t4 = ("hello",) # 元组只放一个元素的话 最后面需要带,
查找某元素的下标 .index(元素)

tuple.index(元素)

统计某个元素在列表中的数量 .count(元素)

tuple.count(元素)

统计元组中全部元素

len(元组)

image.png

字符串str

字符串是不可修改的 要改的话 只能创建一个新的字符串

str.index方法 查找 查找起始西南表

字符串的替换.replace

str.replace(str1,str2)(把str1全部删掉 换成str2)这个方法是生产一个新的字符串

str1 = "SDASCCCWE"
str2 = str1.replace("SD","DS")
print(str1)
print(str2)
字符串的分割.split

str.split(是通过切分符来进行切分的)分割成一小段段字符串存到列表中

去除前后空格.strip()

str.strip()

如果传入字符串 那就是去除前后字符串

image.png

统计字符串count = str("it")

统计it在str字符串里面的次数

统计字符串长度len(str)

image.png

序列

image.png

切片

image.png

切片不会影响老切片 会生成新切片

my_list = [1,2,3,4,5,6]
my_list2 = my_list[1:4]
print(my_list2)    # 打印为 [2, 3, 4] 

上述操作结束 截取my_list里面的下标从1-4(不包含4)

my_tuple = (1,2,3,4,5,6)
my_tuple2 = my_tuple[1:4]
print(my_tuple2) # 打印为 [2, 3, 4] 

上述操作结束 截取my_tuple里面的下标从1-4(不包含4)

my_str = "123456"
my_str2 = my_str[1:4]
print(my_str2) # 打印为234

上述操作结束 截取my_str里面的下标从1-4(不包含4)

以上都没加步长 加上步长为

my_str = "123456"
my_str2 = my_str[0:4:2]
print(my_str2) # 打印为 13

加上步长了 为2 每在0 - 4 里面 每两步取一下

my_str = "123456"
my_str2 = my_str[::-1]
print(my_str2) #打印为654321

这个操作相当于把序列反转了(倒叙)

set集合

集合用大括号{}

集合最大特点就是无序,不重复。下标索引就没法用了

set = {1,2,3,4}

image.png

字典

image.png

无下标索引

my_dict = {"王力宏":99,"王2宏":97} # 新建了一个字典
print(my_dict["王力宏"]) # 这样就找到了王力宏的考试分数
my_dict2 = {
    "王力宏":{
        "语文":77,
        "数学":66,
        "英语":33
    },"周杰军":{
        "语文":88,
        "数学":86,
        "英语":55
    }
} 
print(my_dict2["周杰军"]["语文"]) 

嵌套字典 以及取嵌套字典的方法

image.png

image.png

小案例
my_dict = {
    "王力宏":{
        "部门":"科技部",
        "工资":3000,
        "级别":1
    },"周杰军":{
        "部门":"市场部",
        "工资":5000,
        "级别":2
    },"林俊杰":{
        "部门":"科技部",
        "工资":4000,
        "级别":1
    } 
}
key = ["王力宏","周杰军","林俊杰"]
for key in my_dict:
    if my_dict[key]["级别"] == 1:
        my_dict[key]["级别"] += 1
        my_dict[key]["工资"] += 1000

print(my_dict)

数据容器的分类

image.png

image.png

通用操作

image.png

image.png

python的文件

用UTF-8

打开文件

image.png

image.png

f = open("D:/ml.txt","r",encoding="UTF-8") # 打开文件

读操作相关

image.png

f.read() # 读取全部内容
f.readlines() # 读取全部对象行,封装到列表中

一行一行读取

image.png

line1 = f.readline() #读取第一行

line2 = f.readline() #读取第二行

line3 = f.readline() #读取第三行

for循环读取每一行

for line in f:
    print(f"每一行数据是{line}")

文件关闭

close()关闭文件

f.close()   # 关闭文件

下面是打开关闭等等

image.png

with open("D:/ml.txt","r",encoding="UTF-8") as f:
    print(f.read())

image.png

文件的写入

文件写入.write()

with open("D:/mcw.txt","a",encoding="UTF-8") as f: # 这样 a 是追加写入
    f.write("cwc")
    f.flush()

内容刷新.flush()

image.png

换行符 \n

with open("D:/mcw.txt","a",encoding="UTF-8") as f: # 这样 a 是追加写入
    f.write("\ncwc") # 此处导入换行了
    f.flush()

image.png

小案例
# 打开文件得到文件对象,准备读取
fr = open("D:/bill.txt", "r", encoding="UTF-8")
# 打开文件得到文件对象,准备写入
fw = open("D:/bill.txt.bak", "w", encoding="UTF-8")
# for循环读取文件
for line in fr:
    line = line.strip()
    # 判断内容,将满足的内容写出
    if line.split(",")[4] == "测试":
        continue        # continue进入下一次循环,这一次后面的内容就跳过了
    # 将内容写出去
    fw.write(line)
    # 由于前面对内容进行了strip()的操作,所以要手动的写出换行符
    fw.write("\n")

# close2个文件对象
fr.close()
fw.close()      # 写出文件调用close()会自动flush()

python异常

image.png

捕获异常

image.png

try:
    f = open ("D:/abc.txt","r",encoding="UTF-8")
except:
    print("asddasdas")

image.png

捕获指定异常

try:
    print(Name)
except NameError as e:
   print("出现了变量未定义的异常")

捕获多个异常

try:
    print(Name)
    1 / 0 
except (NameError,ZeroDivisionError) as e:
   print("出现了多个异常")
   print(e)

捕获所有异常

try:
    print(Name)
except :
   print("出现异常了")


try:
    1 / 0 
except Exception:
   print("出现异常了")

else:没有异常

try:
    print("lalala")
except :
   print("出现异常了")
else : 
    print("没有异常")

有没有异常都去执行finally:

try:
    print("lalala")
except :
   print("出现异常了")
else : 
    print("没有异常")
finally:
    print("我最6")

try:
    1 / 0 
except Exception:
   print("出现异常了")
finally:
    print("我最6")

模块

image.png

image.png

import time #导入python内置的time模块(time.py这个代码文件)
print("你好")
time.sleep(5) #通过.就能使用模块内部的全部功能
print("我好")

# 使用from导入time的sleep功能(函数)  (这个方法只能用time里面的 sleep功能)
from time import sleep
print("你好")
sleep(5)
print("我好")
# 使用 * 导入time模块的全部功能
from time import *      # *表示全部的意思
print("你好")
sleep(5)
print("我好")
# 使用as给特定功能加上别名
import time as t
print("你好")
t.sleep(5)
print("我好")
from time import sleep as sl # 把time.sleep 改成 sl这个别名
print("你好")
sl(5)
print("我好")

自定义模块

image.png

if __name__ == '__main__': #这个内部就是main方法
                           #是测试模块

image.png

python包

image.png

image.png

# 创建一个包
# 导入自定义的包中的模块,并使用
import my_package.my_module1
import my_package.my_module2
#
my_package.my_module1.info_print1() #把包 模块 函数导入本地
my_package.my_module2.info_print2()

from my_package import my_module1
from my_package import my_module2
my_module1.info_print1()
my_module2.info_print2()

from my_package.my_module1 import info_print1
from my_package.my_module2 import info_print2
info_print1()
info_print2()

# 通过__all__变量,控制import *
from my_package import *
my_module1.info_print1()
my_module2.info_print2()

安装第三方包

image.png

在cmd 管理员里面输入 pip install 包的名字 就可以安装第三方包

PS C:\Users\yc242> pip install numpy

image.png

面向对象~!~!~!~!

设计类 (class)

# 设计一个类
class Student:
    name = None     # 记录学生姓名
    gender = None   # 记录学生性别
    age = None      # 记录学生年龄
# 创建一个对象
stu_1 = Student()
# 对象属性进行赋值
stu_1.name = "林俊杰"
stu_1.gender = "男"
stu_1.age = 18
# 获取对象中的记录的信息
print(stu_1.name,stu_1.gender,stu_1.age)

成员变量和方法

image.png

image.png

image.png

成员方法中使用成员变量 需要用self这个函数

image.png

# 设计一个类
class Student:
    name = None     # 记录学生姓名
    gender = None   # 记录学生性别
    age = None      # 记录学生年龄

    def say_hi(self):
        print(f"大家好我是{self.name},请大家多多关照")
    def say_hi1(self,msg):  # 传入就self就当不存在进行  只会对msg进行传入
        print(f"大家好我是{self.name},{msg}")
stu1 = Student()
stu1.name = "林俊杰"
stu1.gender = "男"
stu1.age = 18
print(stu1.say_hi())
print(stu1.say_hi1("哎呦不错呀"))

类和对象

# 设计一个闹钟类
class Clock:
    id = None       # 序列化
    price = None    # 价格


    def ring(self):
        import winsound
        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()

image.png

构造方法

image.png

image.png

# 演示使用构造方法对成员变量进行赋值
# 构造方法的名称:__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)

image.png

魔术方法

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__魔术方法
    def __eq__(self, other):    # 和上面的一样 就是可以查看两个数的年纪是不是相等   ==
       return self.age == other.age


stu1 = Student("周杰轮", 31)
stu2 = Student("林俊节", 36)
print(stu1)
print(stu1  > stu2)
print(stu1  < stu2)

前面两个 后面两个下划线 魔术方法

image.png

封装

# 定义一个类,内含私有成员变量和私有成员方法
class Phone:
    __current_voltage = 0.5        # 当前手机运行电压


    def __keep_single_core(self):
        print("让CPU以单核模式运行")


    def call_by_5g(self):
        if self.__current_voltage >= 1:
            print("5g通话已开启")
        else:
            self.__keep_single_core()
            print("电量不足,无法使用5g通话,并已设置为单核运行进行省电。")


phone = Phone()
phone.call_by_5g()

私有成员 能被同一类其他成员使用

image.png

继承

# 演示单继承
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)
phone.call_by_4g()
phone.call_by_5g()
# 演示多继承          多继承真优雅
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()
phone.call_by_4g()
phone.read_card()
phone.write_card()
phone.control()

多继承 真优雅

pass 关键字就是用来补全语法的 表示这里是空的 不产生错误

image.png

复写

子类继承父类的成员属性和成员方法后,如果对其“不满意”,那么可以进行复写即:在子类中重新定义同名的属性或方法即可。

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
        # print(f"父类的厂商是:{Phone.producer}")
        # Phone.call_by_5g(self)
        # 方式2
        print(f"父类的厂商是:{super().producer}")
        super().call_by_5g()
        print("关闭CPU单核模式,确保性能")

phone = MyPhone()
phone.call_by_5g()
print(phone.producer)

image.png

类型注解

# 基础数据类型注解
import json
import random

# var_1: int = 10
# var_2: str = "itheima"
# var_3: bool = True
# 类对象类型注解
class Student:
    pass
stu: Student = Student()

# 基础容器类型注解
# my_list: list = [1, 2, 3]
# my_tuple: tuple = (1, 2, 3)
# my_dict: dict = {"itheima": 666}
# 容器类型详细注解
my_list: list[int] = [1, 2, 3]
my_tuple: tuple[int, str, bool] = (1, "itheima", True)
my_dict: dict[str, int] = {"itheima": 666}
# 在注释中进行类型注解
var_1 = random.randint(1, 10)   # type: int
var_2 = json.loads('{"name": "zhangsan"}')  # type: dict[str, str]
def func():
    return 10
var_3 = func()  # type: int
# 类型注解的限制
var_4: int = "itheima"
var_5: str = 123

image.png

image.png

"""
演示对函数(方法)进行类型注解
"""

# 对形参进行类型注解
def add(x: int, y: int):
    return x + y

# 对返回值进行类型注解
def func(data: list) -> list:
    return data

print(func(1))

Union类型

"""
演示Union联合类型注解
"""
# 使用Union类型,必须先导包
from typing import Union

my_list: list[Union[int, str]] = [1, 2, "itheima", "itcast"]

def func(data: Union[int, str]) -> Union[int, str]:
    pass

image.png

多态

# 演示面向对象的多态特性以及抽象类(接口)的使用

# 定义一个基类 Animal,它是一个抽象类,因为它的方法 speak() 没有具体实现
class Animal:
    def speak(self):
        pass  # 父类中的方法没有具体实现,子类需要重写该方法

# 定义 Dog 类,继承自 Animal 类
class Dog(Animal):
    def speak(self):
        print("汪汪汪")  # 狗叫的方法实现

# 定义 Cat 类,继承自 Animal 类
class Cat(Animal):
    def speak(self):
        print("喵喵喵")  # 猫叫的方法实现

# 定义一个函数 make_noise,接收一个 Animal 类型的对象作为参数
def make_noise(animal: Animal):
    """制造点噪音,需要传入Animal对象"""
    animal.speak()  # 调用传入对象的 speak 方法

# 演示多态,使用 2 个子类对象来调用函数
dog = Dog()  # 创建 Dog 对象
cat = Cat()  # 创建 Cat 对象

make_noise(dog)  # 传入 Dog 对象,调用 Dog 的 speak 方法,输出 "汪汪汪"
make_noise(cat)  # 传入 Cat 对象,调用 Cat 的 speak 方法,输出 "喵喵喵"

# 演示抽象类
# 定义一个抽象类 AC,它定义了空调的一些基本功能,但没有具体实现
class AC:
    def cool_wind(self):
        """制冷"""
        pass  # 父类中的方法没有具体实现,子类需要重写该方法

    def hot_wind(self):
        """制热"""
        pass  # 父类中的方法没有具体实现,子类需要重写该方法

    def swing_l_r(self):
        """左右摆风"""
        pass  # 父类中的方法没有具体实现,子类需要重写该方法

# 定义 Midea_AC 类,继承自 AC 类,实现了 AC 的所有方法
class Midea_AC(AC):
    def cool_wind(self):
        print("美的空调制冷")  # 美的空调制冷功能实现

    def hot_wind(self):
        print("美的空调制热")  # 美的空调制热功能实现

    def swing_l_r(self):
        print("美的空调左右摆风")  # 美的空调左右摆风功能实现

# 定义 GREE_AC 类,继承自 AC 类,实现了 AC 的所有方法
class GREE_AC(AC):
    def cool_wind(self):
        print("格力空调制冷")  # 格力空调制冷功能实现

    def hot_wind(self):
        print("格力空调制热")  # 格力空调制热功能实现

    def swing_l_r(self):
        print("格力空调左右摆风")  # 格力空调左右摆风功能实现

# 定义一个函数 make_cool,接收一个 AC 类型的对象作为参数
def make_cool(ac: AC):
    ac.cool_wind()  # 调用传入对象的 cool_wind 方法

# 创建 Midea_AC 和 GREE_AC 对象
midea_ac = Midea_AC()
gree_ac = GREE_AC()

# 调用 make_cool 函数,传入不同的空调对象,实现多态
make_cool(midea_ac)  # 传入美的空调对象,输出 "美的空调制冷"
make_cool(gree_ac)  # 传入格力空调对象,输出 "格力空调制冷"

image.png

image.png

image.png

0

评论区