《UEFI编程实践》源代码

  • 更新时间:
  • 3835人关注
  • 点击下载

给大家带来的是《UEFI编程实践》源代码,介绍了关于UEFI、编程实践、源代码、UEFI方面的内容,本书是由机械工业出版社出版,已被127人关注,由热心网友宦浩荡提供,目前本书在UEFI类综合评分为:9.5分。

资源详情相关推荐
《《UEFI编程实践》源代码》封面
  • 出版社:机械工业出版社
  • 作者:罗冰
  • 大小:10.3 MB
  • 类别:UEFI
  • 热度:989
  • Python编程:从入门到实践
  • PHP编程从入门到实践
  • Java线程与并发编程实践
  • 飞天开放平台编程指南:阿里云计算的实践
  • Python编程之美:最佳实践指南
  • 配套书籍介绍

    本书偏重于实战,面向UEFI的爱好者和使用者。全书共12章,大致可以分为三部分。

    1. 第1部分为介绍UEFI的基础框架,搭建开发和调试环境,并熟悉代码框架的搭建和编译方法。让读者能把握整体框架,并能为后续的实践做好准备;

    2. 第2部分详细讲解UEFI如何访问外设、构建GUI、编写Option ROM等,并辅以实际的项目实例,加深对UEFI编程的理解。所提供的项目极具实践价值,基本上可以直接用在实际项目中;

    3. 第3部分介绍目前国产计算机上UEFI的发展情况,详细讲解如何在国产计算机上进行UEFI项目的开发,包括搭建开发环境、测试方法等。

    通过阅读本书,读者可以清晰地了解UEFI的编程方法,学习到如何以UEFI的方式去思考计算机的底层架构。书中提供了大量的实例训练,大部分来自作者曾经实战过的商业项目,极具参考价值,能有效帮助读者快速构建自己的UEFI相关产品。

    目录

    • 序一
    • 序二
    • 前言
    • 第1章UEFI的世界1
    • 1.1Legacy BIOS1
    • 1.1.1Legacy BIOS的启动过程2
    • 1.1.2Legacy BIOS的不足之处4
    • 1.2UEFI BIOS6
    • 1.2.1UEFI标准概述6
    • 1.2.2UEFI BIOS的优点8
    • 1.2.3UEFI BIOS的启动过程9
    • 1.2.4国产计算机与UEFI13
    • 1.3本章小结15
    • 第2章UEFI开发和调试环境搭建16
    • 2.1搭建Windows下的UEFI开发环境17
    • 2.1.1安装开发工具17
    • 2.1.2配置开发环境18
    • 2.1.3编译UEFI模拟器和UEFI程序20
    • 2.1.4使用模拟器运行UEFI程序22
    • 2.2Windows下调试UEFI程序24
    • 2.2.1使用Visual Studio调试UEFI程序24
    • 2.2.2使用WINDBG调试UEFI程序27
    • 2.3搭建Linux下的UEFI开发环境30
    • 2.3.1安装开发工具31
    • 2.3.2配置开发环境32
    • 2.3.3编译UEFI模拟器和UEFI程序32
    • 2.3.4使用模拟器运行UEFI程序33
    • 2.4Linux下调试UEFI程序34
    • 2.4.1使用GDB调试UEFI程序34
    • 2.4.2使用Intel UDK Debugger Tool和GDB调试UEFI程序37
    • 2.5制作UEFI启动盘40
    • 2.6本章小结41
    • 第3章构建UEFI应用42
    • 3.1模块和包概述42
    • 3.2搭建UEFI工程模块44
    • 3.2.1DSC文件44
    • 3.2.2INF文件50
    • 3.2.33种入口函数的UEFI应用55
    • 3.2.4库模块的编写61
    • 3.2.5其他工程文件63
    • 3.3搭建UEFI包72
    • 3.3.1包的DSC和DEC文件72
    • 3.3.2添加并编译模块73
    • 3.4用C++编写UEFI应用74
    • 3.4.1支持基础功能75
    • 3.4.2支持全局类77
    • 3.5使用UEFI Protocol81
    • 3.5.1Protocol概述81
    • 3.5.2支持使用Protocol的函数 83
    • 3.5.3使用Protocol示例91
    • 3.6本章小结93
    • 第4章图形与汉字显示94
    • 4.1UEFI图形显示95
    • 4.1.1图形显示的Protocol 95
    • 4.1.2图形显示基本函数的实现101
    • 4.2UEFI汉字显示—写像素点的方式107
    • 4.2.1点阵字的显示与字库提取108
    • 4.2.2写像素点的汉字显示110
    • 4.3UEFI汉字显示—HII方式115
    • 4.3.1HII字体与字库提取116
    • 4.3.2HII汉字显示119
    • 4.3.3HII字符串127
    • 4.4本章小结132
    • 第5章图像显示及特效133
    • 5.1UEFI图像显示—写屏方式134
    • 5.1.1BMP图像显示 134
    • 5.1.2PCX图像显示140
    • 5.1.3JPEG图像显示145
    • 5.2UEFI图像显示—HII方式150
    • 5.2.1图像处理Protocol150
    • 5.2.2HII图像显示153
    • 5.3图像显示的特效 157
    • 5.3.1图像块处理基本函数的实现157
    • 5.3.2颜色变换特效161
    • 5.3.3镜像显示165
    • 5.3.4图像块显示与清屏166
    • 5.4本章小结170
    • 第6章GUI开发与移植172
    • 6.1支持GUI的基础服务 172
    • 6.1.1UEFI事件处理 173
    • 6.1.2UEFI键盘处理179
    • 6.1.3UEFI鼠标处理 185
    • 6.1.4构建GUI框架186
    • 6.2开源GUI框架191
    • 6.2.1GuiLite介绍191
    • 6.2.2使用GuiLite编程 195
    • 6.3GUI框架的移植200
    • 6.4本章小结203
    • 第7章UEFI环境下访问外设205
    • 7.1访问PCI/PCIE设备205
    • 7.1.1与PCI/PCIE设备通信的机制206
    • 7.1.2支持访问PCI/PCIE设备的Protocol209
    • 7.1.3访问PCI/PCIE设备示例213
    • 7.2访问SMBus设备216
    • 7.2.1SMBus协议简介216
    • 7.2.2支持访问SMBus设备的Protocol218
    • 7.2.3访问SMBus设备示例220
    • 7.3访问串口设备223
    • 7.3.1串口协议简介223
    • 7.3.2支持访问串口设备的Protocol225
    • 7.3.3访问串口设备示例228
    • 7.4本章小结230
    • 第8章UEFI驱动与Option ROM232
    • 8.1服务型驱动233
    • 8.1.1安装与卸载Protocol233
    • 8.1.2构建服务型驱动236
    • 8.1.3访问示例Protocol242
    • 8.2UEFI驱动模型243
    • 8.2.1EFI Driver Binding Protocol 243
    • 8.2.2EFI Component Name Protocol247
    • 8.2.3完成驱动框架及其测试248
    • 8.2.4构建UEFI驱动及其测试程序251
    • 8.2.5测试UEFI驱动256
    • 8.3编写Option ROM258
    • 8.3.1PCI Option ROM简介258
    • 8.3.2编写UEFI Option ROM264
    • 8.3.3编译及测试Option ROM268
    • 8.4本章小结272
    • 第9章UEFI与USB273
    • 9.1USB规范简介274
    • 9.1.1USB通信原理276
    • 9.1.2USB描述符280
    • 9.1.3USB标准命令285
    • 9.1.4USB HID设备287
    • 9.2支持USB访问的Protocol292
    • 9.2.1EFI_USB2_HC_PROTOCOL292
    • 9.2.2EFI_USB_IO_PROTOCOL294
    • 9.2.3列举USB控制器和设备297
    • 9.3访问USB HID设备299
    • 9.3.1制作USB HID设备299
    • 9.3.2在UEFI下访问USB HID设备305
    • 9.4本章小结307
    • 第10章UEFI与网络309
    • 10.1准备UEFI网络测试环境311
    • 10.1.1搭建Nt32模拟器的网络环境311
    • 10.1.2在真实UEFI环境下使用网络313
    • 10.1.3在虚拟机UEFI环境下使用网络:VirtualBox314
    • 10.1.4在虚拟机UEFI环境下使用网络:QEMU314
    • 10.1.5IPv6网络测试环境搭建316
    • 10.2使用UEFI Protocol开发网络程序317
    • 10.2.1开发Windows的TCP4服务端程序318
    • 10.2.2开发UEFI的TCP4客户端程序323
    • 10.3使用StdLib的Socket接口开发网络程序334
    • 10.3.1使用Socket编写UEFI TCP4客户端程序334
    • 10.3.2开发Windows的TCP6服务端程序337
    • 10.3.3使用Socket编写UEFI TCP6客户端程序340
    • 10.4本章小结342
    • 第11章龙芯平台上开发UEFI程序343
    • 11.1龙芯平台概述343
    • 11.1.1龙芯产品介绍344
    • 11.1.23A4000的CPU架构简介346
    • 11.2龙芯汇编语言348
    • 11.2.1安装Linux Lab349
    • 11.2.2龙芯汇编语言实验351
    • 11.3龙芯平台UEFI开发环境354
    • 11.3.1搭建龙芯平台UEFI开发环境355
    • 11.3.2编译示例工程356
    • 11.4本章小结357
    • 第12章飞腾平台上开发UEFI程序358
    • 12.1飞腾平台概述359
    • 12.1.1飞腾产品介绍359
    • 12.1.2FT-2000/4的CPU架构简介361
    • 12.2搭建飞腾平台UEFI开发环境363
    • 12.2.1准备EDK2环境364
    • 12.2.2使用Linux系统与gcc-arm365
    • 12.2.3使用Linux系统与Linaro UEFI工具367
    • 12.3飞腾平台的UEFI程序测试368
    • 12.3.1Windows系统下的UEFI测试环境369
    • 12.3.2Linux系统下的UEFI测试环境372
    • 12.3.3测试示例工程372
    • 12.4本章小结374
    • 附录UEFI Shell内置命令375
    精选笔记1:《Python编程:从入门到实践》第三章:列表简介

    7小时59分钟前回答

    什么是列表呢?

    官方说明就是由一些列按特点顺序排列的元素组成。其实可以看出很多个字符串的有序组合吧,里面的内容可以随时的删除,增加,修改。

    下面这个就是一个列表,python打印列表的时候会将中括号和引号打印出来的

    >>> name = ['liubin','liujian','liuliu']
    >>> print (name)
    ['liubin', 'liujian', 'liuliu']

    有序的列表

    和大多数编程语言一样,列表的第一个元素的索引是0,而不是1。如果要输出最后一个元素可以使用-1,倒数第二个可以使用-2,以此类推。

    >>> language = ['python','C++','Java','PHP','Ruby']
    >>> print (language[0])
    python
    >>> print (language[2])
    Java
    >>> print (language[-1])
    Ruby
    >>> print (language[-2].lower())
    php

    列表的修改、添加和删除元素

    修改:其实就是对元素的重新赋值

    motorcycles = ['honda', 'yamaha', 'suzuki']
    print(motorcycles)
    ['honda', 'yamaha', 'suzuki']
    motorcycles[0] = 'ducati'
    print(motorcycles)
    ['ducati', 'yamaha', 'suzuki']

    在末尾添加:append()

    motorcycles = ['honda', 'yamaha', 'suzuki']
    print(motorcycles)
    ['honda', 'yamaha', 'suzuki']
    motorcycles.append('ducati')
    print(motorcycles)
    ['honda', 'yamaha', 'suzuki', 'ducati']

    在列表中插入:insert(索引,字符串)

    motorcycles = ['honda', 'yamaha', 'suzuki']
    motorcycles.insert(0, 'ducati')
    print(motorcycles)

    del语句删除元素,需要知道元素在列表中索引,删除后,无法再次访问它了

    motorcycles = ['honda', 'yamaha', 'suzuki']
    print(motorcycles)
    ['honda', 'yamaha', 'suzuki']
    del motorcycles[0]
    print(motorcycles)
    ['yamaha', 'suzuki']

    pop()弹出元素,默认是弹出最顶层的元素,就是最后一个,如果知道元素在列表中的位置,可以添加索引弹出

    motorcycles = ['honda', 'yamaha', 'suzuki']
    print(motorcycles)
    ['honda', 'yamaha', 'suzuki']
    popped_motorcycle = motorcycles.pop()
    print(motorcycles)
    ['honda', 'yamaha']
    print(popped_motorcycle)
    suzuki
    motorcycles = ['honda', 'yamaha', 'suzuki'
    first_owned = motorcycles.pop(0)
    print('The first motorcycle I owned was a ' + first_owned.title() + '.')
    The first motorcycle I owned was a Honda.

    有的时候你不知道元素的位置,但是知道元素的内容,可以使用remove('字符串')或者remove(变量)来删除,remove()只能删除第一个指定的值,删除的值可能在列表中出现多次,就需要使用后面学习到的循环了。

    motorcycles = ['honda', 'yamaha', 'suzuki', 'ducati']
    print(motorcycles)
    ['honda', 'yamaha', 'suzuki', 'ducati']
    motorcycles.remove('ducati')
    print(motorcycles)
    ['honda', 'yamaha', 'suzuki']

    永久性排序

    方法sort()对列表进行永久的排序

    >>> car = ['bmw','audi','toyota','subaru']
    >>> print (car)
    ['bmw', 'audi', 'toyota', 'subaru']
    >>> car.sort()
    >>> print (car)
    ['audi', 'bmw', 'subaru', 'toyota']
    >>> car.sort(reverse=True)
    >>> print (car)
    ['toyota', 'subaru', 'bmw', 'audi']

    向方法传递参数reverse=Ture可以倒着排序

    临时性排序

    函数sorted()对列表进行临时的排序

    >>> car = ['bmw','audi','toyota','subaru']
    >>> print (sorted(car))
    ['audi', 'bmw', 'subaru', 'toyota']
    >>> print (car)
    ['bmw', 'audi', 'toyota', 'subaru']

    如果你要按与字母顺序相反的顺序显示列表,也可以向函数sorted()传递参数reverse=Ture

    翻转列表

    方法reverse()反正列表

    >>> car = ['bmw','audi','toyota','subaru']
    >>> car.reverse()
    >>> print (car)
    ['subaru', 'toyota', 'audi', 'bmw']

    求列表的长度

    函数len()可以知道列表的长度,python计算元素个数的时候,是从1开始的。

    >>> car = ['bmw','audi','toyota','subaru']
    >>> len(car)
    4

    课后练习及答案

    #3-1 姓名

    names = ['Qiqi','Danliang','Mingliang','Peng']
    for x in range(0,4):
    print(names[x])

    #3-2 问候语

    names = ['qiqi','qanliang','mingliang','peng']
    for x in range(0,4):
    print("Hello," + names[x].title() + "大吉大利!")

    #3-3 自己的列表

    trip_mode = ['小黄车','摩拜','暴龙兽','大宝剑']
    for x in range(0,4):
    print("我今天想骑" + trip_mode[x] + "去抓皮卡丘!")

    #3-4 嘉宾名单

    names = []
    names.append('新垣结衣')
    names.append('奥黛丽赫本')
    names.append('迪丽热巴')
    for x in range(0,3):
    print('Dear ' + names[x] + ',Can you come to my dinner?')

    #3-5 修改嘉宾名单

    names = []
    names.append('新垣结衣')
    names.append('奥黛丽赫本')
    names.append('迪丽热巴')
    for x in range(0,3):
    print('Dear ' + names[x] + ',Can you come to my dinner?')
    print(names[1] + '无法赴约。')
    names[1] = ('赵丽颖')  #改名单
    for x in range(0,3):
    print('Dear ' + names[x] + ',Can you come to my dinner?')

    #3-6 添加嘉宾

    names = []
    names.append('新垣结衣')
    names.append('奥黛丽赫本')
    names.append('迪丽热巴')
    for x in range(0,3):
    print('Dear ' + names[x] + ',Can you come to my dinner?')
    print('\n' + names[1] + '无法赴约。\n')
    names[1] = ('赵丽颖')  #改名单
    for x in range(0,3):
    print('Dear ' + names[x] + ',Can you come to my dinner?')
    print('\nHaha~,I found a bigger table, I can invite more people!\n')
    names.insert(0,'紫霞')
    names.insert(2,'静香')
    names.append('提莫')
    for x in range(0,len(names)):
    print('Dear ' + names[x] + ',Can you come to my dinner?')

    #3-7 缩减名单

    names = []
    names.append('新垣结衣')
    names.append('奥黛丽赫本')
    names.append('迪丽热巴')
    for x in range(0,3):
        print('Dear ' + names[x] + ',Can you come to my dinner?')
    print('\n' + names[1] + '无法赴约。\n')
    names[1] = ('赵丽颖')  #改名单
    for x in range(0,3):
        print('Dear ' + names[x] + ',Can you come to my dinner?')
    print('\nHaha~,I found a bigger table, I can invite more people!\n')
    names.insert(0,'紫霞')
    names.insert(2,'静香')
    names.append('提莫')
    for x in range(0,len(names)):
        print('Dear ' + names[x] + ',Can you come to my dinner?')
    print('\nOh! GouRiDe快递没给我把桌子送来,我只能邀请两位了(┬_┬)!\n')
    X = len(names)
    for x in range(0,X-2):
        popped_name = names.pop()
        print('实在抱歉,' + popped_name +'我不能与你共进晚餐了!')
    for x in range(0,len(names)):
        print('Dear ' + names[x] + ',我依然邀请你来与我共进晚餐!')
    del names[1]  #del列表应从后往前!
    del names[0]
    print(names)

    #3-8 放眼世界

    cities = ['chongqing','chengdu','xiamen','kuning','shenzhen']
    print(cities)
    print(sorted(cities))
    print(cities)
    print(sorted(cities,reverse=True))
    print(cities)
    cities.reverse()
    print(cities)
    cities.reverse()
    print(cities)
    cities.sort()
    print(cities)
    cities.sort(reverse=True)
    print(cities)

    #3-9 晚餐嘉宾

    names = []
    names.append('新垣结衣')
    names.append('奥黛丽赫本')
    names.append('迪丽热巴')
    for x in range(0,3):
        print('Dear ' + names[x] + ',Can you come to my dinner?')
    print('\n' + names[1] + '无法赴约。\n')
    names[1] = ('赵丽颖')  #改名单
    for x in range(0,3):
        print('Dear ' + names[x] + ',Can you come to my dinner?')
    print('\nHaha~,I found a bigger table, I can invite more people!\n')
    names.insert(0,'紫霞')
    names.insert(2,'静香')
    names.append('提莫')
    for x in range(0,len(names)):
        print('Dear ' + names[x] + ',Can you come to my dinner?')
    print('\nOh! GouRiDe快递没给我把桌子送来,我只能邀请两位了(┬_┬)!\n')
    X = len(names)
    for x in range(0,X-2):
        popped_name = names.pop()
        print('实在抱歉,' + popped_name +'我不能与你共进晚餐了!')
    for x in range(0,len(names)):
        print('Dear ' + names[x] + ',我依然邀请你来与我共进晚餐!')
    print('\n最后,我将邀请' + str(len(names)) + '个人参加晚宴!')
    del names[1]  #del列表应从后往前!
    del names[0]
    print(names)

     

    相关声明:

    《UEFI编程实践》源代码 下载资源由用户 韩溶溶 于 2021-12-04 07:38:23 分享至网盘,版权归机械工业出版社所有。仅供想学习UEFI的网友交流使用,专题参考:UEFI,

    UEFI相关资源

    • 操作系统实践:基于Linux的应用与内核编程

      操作系统实践:基于Linux的应用与内核编程

      《操作系统实践应用场景Linux的应用与内核编程》融合很多年操作系统课程内容理论研究课堂教学工作经验,应用场景当今时兴的开源系统操作系统Ubuntul4.04LTS(Linux内核3.13.0)设计方案了1组操

      大小:55.1 MB操作系统

      立即下载
    • Python渗透测试编程技术:方法与实践

      Python渗透测试编程技术:方法与实践

      《Python渗透测试编程技术:方法与实践》由资深的网络安全教师撰写,内容围绕如何使用目前备受瞩目的Python语言进行网络安全编程展开。《Python渗透测试编程技术:方法与实践》从Python的基础讲起,系统讲述了网络安全的作用、方法论,Python在网络安全管理上的应用,以及Python在实现这些应用时相关的网络原理和技术。

      大小:167.2 MBPython编程

      立即下载
    • Windows内核安全编程从入门到实践

      Windows内核安全编程从入门到实践

      Windows内核安全编程从入门到实践 作者:《黑客防线》编辑部 组编 出版时间:2012 本书详细介绍了Windows平台下的内核安全编程知识。首先简单介绍了驱动编程的基本方法;然后详细介绍了Windows各个系统组件的工作原理,如文件系统、网络系统自上而下的执行流程。同时还介绍了各个组件涉及的安全问题,如文件隐藏、键盘记录等,并通过工程项目让读者从代码层级了解这些信息安全问题及解决方法;最后介绍了驱动编程本身的安全问题,如安全编码的注

      大小:79.01MBWindows编程

      立即下载
    • 并行编程方法与优化实践

      并行编程方法与优化实践

      这本书主要结合X86SSE与AVX、ARMNeon、OpenMP、CUDA和OpenCL等讲解了并行编程的技术、方法和实践,并给出大量示例

      大小:100.6 MB编程设计

      立即下载
    • 高效前端:Web高效编程与优化实践

      高效前端:Web高效编程与优化实践

      本书精选了前端开发中的34个疑难问题,从分析问题入手,逐步给出解决方案,并分析各种方案的优劣,并总结出高效编程的最佳实践和各种性能优化的方法

      大小:199.1 MB前端设计

      立即下载
    • Visual C++/Turbo C串口通信编程实践

      Visual C++/Turbo C串口通信编程实践

      VisualC++/TurboC串口通信编程实践 作者:龚建伟熊光明 出版时间:2004/10/1 本书从编程实践的角度详细介绍了Windows环境下和DOS环境下的串口通 信的基本方法,并根据当前串口与网络结合发展的趋势,介绍了串口与网络 TCP/IP、远程控制与监测相结合的一些解决方案和编程要点。由于编程步骤 详尽,初学VisualC++/C(甚至是以前完全没有接触过VisualC++)的读者也 能很快编写出VisualC++的串口通信程序。本书配光盘,书中实例源程序和 相关资料可在对应章节的文件夹中

      大小:16.27 MBC++

      立即下载
    • Visual C++实践与提高:图形图像编程篇

      Visual C++实践与提高:图形图像编程篇

      VisualC++实践与提高—图形图像编程篇 作者:李于剑 丛书名:计算机编程实践与提高系列 中国铁道 出版日期:2001年7月 本书将向读者讲述如何用VisualC++进行图形图像编程。本书共分为图形篇、图像篇、综合提高篇。图形篇以计算机绘图的基础知识为铺垫,介绍了各种图形元素的绘制方法,并结合实际代码实现了一个小型的绘图系统;图像篇通过实例向读者介绍了不同格式图像的处理方法,并给出了一些特效处理的技巧;综合提高篇综合应用了图形图像

      大小:16.32 MBC++

      立即下载

    UEFI配套笔记

    16小时47分钟前回答

    《Python编程:从入门到实践》第五章:if语句

    5-1 条件测试 编写一系列条件测试;将每个测试以及你对其结果的预测和实际结果都打印出来。你编写的代码应类似于下面这样: car = subaruprint(Is car == subaru? I predict True.)print(car == subaru) print(\nIs car == audi? I predict False.)print(car == audi) 详细研究实际结果,直到你明白了它为何为True 或False 。 创建至少10个测试,且其中结果分别为True 和False 的测试都至少有5个。 car =subaruprint(Is car == subarur? I predict True.)print(car == subaru)print(\nIs car == audi? I predict False)print(car ==audi) 结果: Is car == subarur? I predict True.TrueIs car == audi? I predict FalseFalse 5-3 外星人颜色 外星人颜色#1 假设在游戏中刚射杀了一个外星人,请创建一个名为alien_……

    24小时11分钟前回答

    《Python编程:从入门到实践》第四章:操作列表

    4-1 比萨 想出至少是三种你喜欢的比萨,将其名称存储在一个列表中,再使用for循环将每种比萨的名称都打印出来。 修改这个for循环,使其打印包含比萨名称的矩阵,而不仅仅是比萨的名称。对于每种比萨,都显示一行输出,如I like pepperoni pizza。 在程序末尾添加一行代码,它不在for循环中,指出你有多喜欢比萨。输出应包含针对每种比萨的消息,还有一个总结性矩阵,如I really love pizza! pizza = [banana,durian,apple]for x in pizza:print(I like %s pizza%x)print(I really love Pizza) 结果: I like banana pizzaI like durian pizzaI like apple pizzaI really love Pizza 4-2 动物 想出至少三种有共同特征的动物,将这些动物的名称存储在一个列表中,……

    11小时46分钟前回答

    《Python编程:从入门到实践》第八章:函数

    8-1 消息 编写一个名为display_message() 的函数,它打印一个句子,指出你在本章学的是什么。调用这个函数,确认显示的消息正确无误。 # -*- coding : utf-8 -*-def display_messages(): print(本章学习的是函数)if __name__ == __main__: display_messages() 结果: 8-2 喜欢的图书 编写一个名为favorite_book() 的函数,其中包含一个名为title 的形参。这个函数打印一条消息,如One of my favorite books is Alice in Wonderland 。调用这个函数,并将一本图书的名称作为实参传递给它。 # -*- coding : utf-8 -*-def favorite_book(title): print(One of my favorite books is %s%title)if __name__ == __main__: book = input(whats your favorite book? ) favorite_book(book) 结果: 8-3 T恤 编写一个名为mak……