版权信息 书名:Python财务应用编程
ISBN:978-7-115-63805-2
本书由人民邮电出版社发行数字版。版权所有,侵权必究。
您购买的人民邮电出版社电子书仅供您个人使用,未经授权,不得以任何方式复制和传播本书内容。
我们愿意相信读者具有这样的良知和觉悟,与我们共同保护知识产权。
如果购买者有侵权行为,我们可能对该用户实施包括但不限于关闭该帐号等维权措施,并可能追究法律责任。
版 权 著 胡奕冰 张 炜 穆礼渊 等
责任编辑 胡俊英
人民邮电出版社出版发行 北京市丰台区成寿寺路11号
邮编 100164 电子邮件 315@ptpress.com.cn
网址 http://www.ptpress.com.cn
读者服务热线: (010)81055410
反盗版热线: (010)81055315
内 容 提 要 本书结合具体实例由浅入深、从易到难地讲解Python财务应用的精髓。本书按知识结构分为两篇(共11章),第一篇为基础入门篇,讲解Python基础知识、NumPy数组、财务数据采集、财务数据处理与可视化、财务报表分析;第二篇为案例实战篇,讲解企业利润管理、企业成本管理、企业流动资产管理、企业固定资产管理、企业筹资决策分析、企业投资决策分析。
随书附赠的电子资料包括书中案例素材和源代码、所有实例操作过程以及基础知识的视频教程。
本书适合作为财务数据分析相关人员的学习参考书,也适合作为各学校和培训机构相关专业教师和学生的教学和自学辅导书。
前 言 Python简单易学,可以让用户简单、有效地对数据进行处理,编写出易读、易维护的代码。Python是一门功能强大、跨平台的计算机脚本语言,鉴于其开源特性,Python易于扩展,有着丰富的扩展库,开发者可以用Python实现完整应用程序所需的各种功能,轻松完成各种高级任务,并且所编写的代码可以被移植到许多平台。
一、本书特色 本书具有五大特色。
● 特色1:针对性强。
本书编者根据自己在财务应用领域多年的工作经验和教学经验,针对初学者学习Python财务数据处理的难点和疑点由浅入深、全面细致地讲解Python在财务应用领域的各种功能及其使用方法。
● 特色2:实例专业。
书中的很多实例本身就是财务应用项目案例,经过编者精心提炼和改编,不仅能保证读者掌握知识点,还能帮助读者掌握实际的操作技能。
● 特色3:提升技能。
本书从全面提升读者的Python财务应用操作能力的角度出发,结合大量的实例来讲解如何利用Python实现财务专业应用,真正让读者懂得财务数据处理并能够独立地完成各种财务数据分析任务。
● 特色4:内容全面。
本书在有限的篇幅内,讲解Python的大部分常用功能,内容涵盖Python基础知识、NumPy数组、财务数据采集、财务数据处理与可视化、财务报表分析、企业利润管理、企业成本管理、企业流动资产管理、企业固定资产管理、企业筹资决策分析、企业投资决策分析等。通过学习本书,读者可以较为全面地掌握Python财务应用相关知识。本书不仅有透彻的讲解,还有丰富的实例,通过对这些实例的演练,能够帮助读者找到一条学习Python财务应用的捷径。
● 特色5:知行合一。
本书结合大量的财务应用实例,详细讲解Python的知识要点,让读者在学习实例的过程中潜移默化地掌握Python软件操作技巧,培养读者财务应用与数据分析的实践能力。
二、电子资料使用说明 本书还随书赠送了一系列电子资料,其中包括本书配套的案例素材及源码文件,以及其他有助于自学和教学的资源。本书配套的视频教程可以通过微信“扫一扫”功能扫描正文中的二维码观看。
三、本书服务 1.安装软件的获取 按照本书上的实例进行操作练习,以及使用Python进行财务应用与数据分析练习时,需要事先在计算机上安装相应的软件。读者可访问官网下载并安装Python。
2.关于本书的技术问题或有关本书信息的发布 读者遇到有关本书的技术问题,可以在QQ群609322744直接留言,我们将尽快回复。
四、本书编写人员 本书主要由中国农业大学国际学院的胡奕冰、河北省农业农村厅的张炜、某部石家庄审计中心的穆礼渊、河北省农业农村厅的张晓敏和河北农业项目监测中心的刘朋以及河北农业大学经济管理学院的张晓璇编写。其中胡奕冰执笔编写了第1~3章,张炜执笔编写了第4~5章,穆礼渊执笔编写了第6~7章,张晓敏执笔编写了第8~9章,刘朋执笔编写了第10章,张晓璇执笔编写了第11章。杨雪静为本书的出版提供了大量的帮助,在此一并表示感谢。
由于编者水平有限,书中不足之处在所难免,望广大读者加入QQ群609322744参与交流和讨论,帮助我们更好地改进内容。
编 者
2023年10月
资源与支持 资源获取 本书提供如下资源:
● 本书案例素材及源代码;
● 书中彩图文件;
● 本书思维导图;
● 异步社区7天VIP会员。
此外,本书还额外附赠效率提升资源包。
● 提升工作效率:
❏ AI工具全面指南;
❏ AI工具全景图。
● 提升教学效率:
❏ 教学大纲;
❏ 课程教案;
❏ 课程标准;
❏ PPT串讲。
要获得以上资源,您可以扫描下方二维码,根据指引领取。
提交错误信息 作者和编辑尽最大努力来确保书中内容的准确性,但难免会存在疏漏。欢迎您将发现的问题反馈给我们,帮助我们提升图书的质量。
当您发现错误时,请登录异步社区(https://www.epubit.com),按书名搜索,进入本书页面,单击“发表勘误”,输入错误信息,单击“提交勘误”按钮即可(见下图)。本书的作者和编辑会对您提交的错误信息进行审核,确认并接受后,您将获赠异步社区的100积分。积分可用于在异步社区兑换优惠券、样书或奖品。
与我们联系 我们的联系邮箱是contact@epubit.com.cn。
如果您对本书有任何疑问或建议,请您发邮件给我们,并请在邮件标题中注明本书书名,以便我们更高效地做出反馈。
如果您有兴趣出版图书、录制教学视频,或者参与图书翻译、技术审校等工作,可以发邮件给我们。
如果您所在的学校、培训机构或企业,想批量购买本书或异步社区出版的其他图书,也可以发邮件给我们。
如果您在网上发现有针对异步社区出品图书的各种形式的盗版行为,包括对图书全部或部分内容的非授权传播,请您将怀疑有侵权行为的链接发邮件给我们。您的这一举动是对作者权益的保护,也是我们持续为您提供有价值的内容的动力之源。
关于异步社区和异步图书 “异步社区” 是由人民邮电出版社创办的IT专业图书社区,于2015年8月上线运营,致力于优质内容的出版和分享,为读者提供高品质的学习内容,为作译者提供专业的出版服务,实现作者与读者在线交流互动,以及传统出版与数字出版的融合发展。
“异步图书” 是异步社区策划出版的精品IT图书的品牌,依托于人民邮电出版社在计算机图书领域的发展与积淀。异步图书面向IT行业以及各行业使用IT的用户。
第一篇 基础入门篇 本篇主要介绍Python编程的一些基础知识与Python财务应用的基础知识,包括Python基础知识、NumPy数组、财务数据采集、财务数据处理与可视化、财务报表分析等。通过本篇的学习,读者可以打下在财务方面应用Python的基础,为后面的具体案例实战进行必要的知识准备。
第1章 Python基础知识 Python简单易学,易于扩展,有着丰富的扩展库,开发者可以用Python实现完整应用程序所需的各种功能,轻松完成各种高级任务,并且所编写的代码可以被移植到许多平台。因此Python是一门功能强大、跨平台的计算机脚本语言。
“工欲善其事,必先利其器。”本章主要介绍Python的安装方法、数据类型、集成开发环境、常用的模块库,以及程序结构等,帮助读者初步认识Python,对Python的功能和工作环境有大体的了解。
1.1 初识PythonPython是一种面向对象、解释型的编程语言,距今已有30多年的发展历史,成熟且稳定。它包含一组完善而且容易理解的标准库,语法非常简洁和清晰,能够轻松完成许多常见的任务。
1.1.1 Python简介 1989年,荷兰数学和计算机科学研究学会(Centrum Wiskunde & Informatica,CWI)的吉多·范罗苏姆(Guido van Rossum)为了克服ABC语言非开放的缺点,受Modula-3的影响,结合UNIX Shell和C的用法,使用C语言开发了一个新的脚本解释程序,命名为Python。
1991年发布Python的第一个版本。此时Python已经具有类、函数、异常处理,包含表和词典在内的核心数据类型,以及以模块为基础的拓展系统。1991—1994年,Python增加了lambda、map、filter和reduce。1995年,Guido van Rossum继续他在Python方面的工作,发布了它的多个版本。1999年,Python的“Web框架之祖”——Zope发布。
2000年5月,Guido van Rossum和Python核心开发团队转到BeOpen,并组建了BeOpen PythonLabs团队。同年10月,BeOpen PythonLabs团队发布了Python 2,该版本加入了内存回收机制,构成了现在Python语言框架的基础,该系列稳定版本是Python 2.7。
2001年,Python软件基金会(Python Software Foundation,PSF)成立,这是一个专为拥有Python相关知识产权而创建的非营利组织。2004年,Web框架Django诞生,自此以后,Python的使用率呈线性增长。
2008年12月3日,发布了Python 3,该版本不完全兼容Python 2。2011年1月,Python 3被TIOBE编程语言排行榜评为2010年年度语言。
2021年10月4日,Python正式发布了3.10版本。2022年10月24日,发布3.11版本。
自诞生之初,Python的定位就是优雅、明确、简单,因此提供了高效的高级数据结构,Python是严谨的程序设计语言,这使得Python程序总是简单易懂,被广泛应用于系统管理任务的处理和Web编程,成为最受欢迎的程序设计语言之一。其主要特点有以下几点。
● Python是一种解释型语言:开发过程中没有编译这个环节,类似于PHP和Perl语言。
● Python是交互式语言:可以在一个Python命令提示符>>>后直接执行代码。
● Python是面向对象语言:Python是支持面向对象的风格或将代码封装在对象中的编程技术。
● Python是适合初学者使用的语言:Python对初级程序员而言,是一种伟大的语言,它支持广泛的应用程序开发,从简单的文字处理软件到浏览器再到游戏都支持。
1.1.2 安装Python Python是一门解释型脚本语言,要运行编写的代码,需要先安装Python解释器。
1.下载Python 在浏览器中打开Python官网下载页面,向下滑动页面,在“Looking for a specific release?”列表框中可以看到可下载的Python版本列表(从Python 2.0.1~Python 3.11.0,Python 3.11.0为写稿时最新版本),如图1-1所示。
图1-1 Python版本列表
单击要下载的版本右侧的“Download”,即可进入指定版本的安装程序下载页面。如果要下载最新版本3.11.0,还可以直接单击官网顶部的“Download Python 3.11.0”按钮,进入图1-2所示的下载页面。
图1-2 下载页面
提示
每个版本的Python根据不同的计算机操作系统,分为不同的安装程序。计算机操作系统包括Windows、Linux/UNIX、macOS等。一般读者都使用Windows系统,因此这里只介绍64位Windows环境下的Python 3.11.0下载及安装过程。本书中介绍的程序也是在该系统下进行演示的。
单击要下载的安装程序Windows installer(64-bit),即可下载Python 3.11.0的安装程序python-3.11.0-amd64.exe(64位的完整的离线安装程序)。
2.安装Python (1)双击安装程序python-3.11.0-amd64.exe,弹出图1-3所示的“Python 3.11.0(64-bit) Setup”对话框。
下面介绍图1-3所示界面中的选项。
● Install Now:默认安装,且默认安装路径不能更改(一般默认安装在C盘)。
● Customize installation:自定义安装,可指定安装路径和安装设置。
● Use admin privileges when installing py.exe:勾选该复选框,可使用管理员权限安装Python。
● Add python.exe to PATH:勾选该复选框,可将Python自动添加到环境变量中。
(2)勾选“Add python.exe to PATH”复选框,如图1-3所示。这样可以将Python命令工具所在目录添加到系统PATH环境变量中,以后开发程序或者执行Python命令会非常方便。
图1-3 安装界面
提示
勾选“Add python.exe to PATH”复选框这一步非常重要。如果不勾选该复选框,Python安装完成后,命令提示符窗口中会显示“‘python’不是内部或外部命令,也不是可运行的程序或批处理文件。”,如图1-4所示。要解决这种问题,就需要手动在计算机的环境变量中添加Python安装路径。
图1-4 安装错误信息
(3)单击“Customize installation”选项,弹出图1-5所示的选项设置界面“Optional Features”,在这里可以选择默认参数设置。
图1-5 选项设置界面
● Documentation:勾选该复选框,安装Python帮助文档。
● pip:勾选该复选框,可安装下载Python的工具pip。pip(Python install package)是通用的Python包管理工具。
● tcl/tk and IDLE:安装开发环境tkinter和IDLE(Integrated Development and Learning Environment,集成开发和学习环境)。
● Python test suite:安装标准库测试套件。
● py launcher:安装Python的启动器。
● for all users(requires admin privileges):适用于所有用户(需要管理员权限)。
(4)单击“Next”按钮,进入图1-6所示的高级设置界面“Advanced Options”,在“Customize install location”文本框中更改安装路径(选择的路径应具有写入权限,不建议安装在C盘),其余保持默认设置。
图1-6 高级设置界面
(5)单击“Install”按钮,即可开始安装Python,此时对话框内显示安装进度,如图1-7所示。由于系统需要复制大量文件,所以需要等待几分钟。在安装过程中,可以随时单击“Cancel”按钮终止安装过程。
图1-7 安装进度界面
(6)安装成功后,显示安装成功界面“Setup was successful”,如图1-8所示。单击“Close”按钮关闭对话框,即可完成Python 3.11.0的安装工作。
图1-8 安装成功界面
3.检查安装是否成功 Python安装结束后,还需要检查安装是否成功。
(1)安装结束后,单击桌面左下角的“开始”按钮,在弹出的菜单中选择“Windows系统”→“运行”命令,打开“运行”对话框。
(2)在“运行”对话框中执行“cmd”命令,打开命令提示符窗口。
(3)在命令提示符后输入“python”,然后按Enter键执行命令,如果出现图1-9所示的运行结果,表示Python安装成功。
图1-9 安装检查运行结果
实例1:初识Python的交互式运行环境
安装好Python后,接下来通过一个简单的加减法运算实例,帮助读者熟悉Python的交互式运行环境。
操作步骤如下。
(1)按Windows+R快捷键,打开“运行”对话框。
(2)在“打开”文本框中输入“cmd”,单击“确定”按钮或按Enter键,打开命令提示符窗口,如图1-10所示。
图1-10 命令提示符窗口
(3)在命令提示符后输入“python”命令,按Enter键,显示Python的版本信息,同时启动交互式运行环境,并显示命令提示符>>>,如图1-11所示。
图1-11 命令运行结果
(4)在命令提示符>>>后输入下面的代码:
25+18-22
(5)按Enter键执行命令,即可在命令提示符窗口中立即看到运行结果,并输出一个新的命令提示符>>>,如图1-11所示。
(6)按Ctrl+Z快捷键或者输入“exit()”命令,然后按Enter键,即可退出交互式运行环境,回到Windows命令行程序,如图1-12所示。
图1-12 退出交互式运行环境
1.1.3 解释器IDLE Shell 3.11.0 Python解释器IDLE Shell 3.11.0是一个功能完备的交互式编程客户端,在安装Python时会自动安装。
在“开始”菜单中选择“Python 3.11”文件夹中的“IDLE(Python 3.11 64-bit)”,即可启动IDLE Shell 3.11.0,如图1-13所示。
图1-13 IDLE Shell 3.11.0解释器
在命令提示符后输入命令,按Enter键即可执行命令,查看运行结果,如图1-14所示。
图1-14 运行结果
在IDLE Shell 3.11.0中还可以新建Python文件。对于较复杂的程序或后续需要重复执行的程序,可以选择“File”→“New File”命令,新建Python文件,在文件中编写程序并保存,如图1-15所示。
图1-15 Python文件
在菜单栏选择“Run”→“Run Module”命令,或直接按F5快捷键,即可运行文件中的程序,如图1-16所示。
图1-16 运行结果
当然,也可以打开命令提示符窗口,进入文件保存的路径,然后执行“python circleArea.py”(Python文件名称),即可输出运行结果。
1.1.4 安装Python库 Python的一大特色是其拥有丰富的模块库,模块库分为3类:Python标准库、第三方库、应用程序自定义模块库。财务分析使用到的模块库通常包括NumPy、pandas、Matplotlib、SciPy、PrettyTable等。所有第三方库需要下载、安装、导入后才可以应用。
安装模块库可以使用包管理工具pip3和Anaconda3,本书介绍使用pip3安装模块库的方法。
pip3是Python 3用来管理包的工具,可以用来安装、升级、卸载第三方库,查看包信息等。利用pip3,用户可以借助工具(例如twine)将自己所写的包发布到PyPI(Python Package Index,Python包索引)。在安装Python 3.11时已经安装了pip3工具。
下面以安装数值计算扩展库NumPy为例,介绍使用pip3安装Python模块库的操作方法。
(1)按Windows+R快捷键打开“运行”对话框,输入“cmd”后按Enter键,打开命令提示符窗口,显示当前系统的用户名,例如:
C:\Users\QHTF>
(2)在命令提示符窗口中输入如下命令并按Enter键执行:
pip3 install numpy
出现NumPy的安装过程信息,显示如下:
C:\Users\QHTF>pip3 install numpy
Collecting numpy
Downloading numpy-1.23.5-cp311-cp311-win_amd64.whl (14.6 MB)
(3)安装结束后,显示安装成功信息:
Installing collected packages: numpy
Successfully installed numpy-1.23.5
(4)启动Python,在命令提示符窗口中输入下面程序并按Enter键执行,可以验证安装是否成功:
from numpy import *
eye(4)
array([[1., 0., 0., 0.],
[0., 1., 0., 0.],
[0., 0., 1., 0.],
[0., 0., 0., 1.]])
提示
from numpy import * 表示导入NumPy库。
eye(4)用于生成单位矩阵,该矩阵对角线上的元素为1,其余位置的元素为0。
如果未安装成功,会以红色字体显示如下所示的警告信息:
Traceback (most recent call last):
File "<pyshell#19>", line 1, in <module>
from numpy import *
ModuleNotFoundError: No module named 'numpy'
1.2 集成开发环境PyCharmPyCharm是由捷克的软件开发公司JetBrains打造的一款Python IDE(Integrated Development Environment,集成开发环境)。PyCharm具备一般Python IDE的功能,比如调试、语法高亮、项目管理、代码跳转、智能提示、自动完成、单元测试、版本控制等。PyCharm还提供了一些很好的功能用于Django开发,支持Google App Engine,还支持在.NET和Mono上实现的Python语言IronPython。
1.2.1 安装PyCharm 首先下载软件。
(1)登录PyCharm的官网,看到有两个版本,即Professional(专业版,收费,可试用30天)和Community(社区版,免费),可供选择,如图1-17所示。
图1-17 PyCharm官网下载页面
一般对于初学者或读者来说,下载免费社区版即可。
(2)在“Community”下方的“Download”按钮右侧的下拉列表框中根据计算机操作系统的CPU(Central Processing Unit,中央处理器)架构选择对应的选项“.exe”或“.exe(ARM64)”。然后单击“Download”按钮,下载PyCharm 2022.3版本的pycharm-community-2022.3.exe文件。
(3)双击下载的pycharm-community-2022.3.exe文件,弹出PyCharm的安装界面,如图1-18所示。
图1-18 安装界面
(4)单击“Next”按钮,在打开的对话框中设置PyCharm的安装路径。默认安装在C盘下,如图1-19所示,可以单击“Browse...”按钮,自定义安装路径。
图1-19 设置安装路径
(5)单击“Next”按钮,在图1-20所示的对话框中设置安装选项。
图1-20 设置安装选项
● PyCharm Community Edition:勾选该复选框,为PyCharm创建桌面快捷方式。
● Add "bin" folder to the PATH:勾选该复选框,将PyCharm的启动目录添加到环境变量,执行该操作过后,需要重启计算机。
● Add "Open Folder as Project":勾选该复选框,添加右键快捷菜单,使用打开项目的方式打开选中的文件夹。
● .py:勾选该复选框,将.py文件与PyCharm关联起来,默认用PyCharm打开.py文件。勾选该复选框后,PyCharm每次打开的速度会比较慢。
(6)单击“Next”按钮,设置PyCharm桌面快捷方式所在的“开始”菜单中的文件夹,默认选择“JetBrains”,如图1-21所示。单击“Install”按钮,此时对话框内会显示安装进度,如图1-22所示,然后等待安装完毕。
图1-21 选择“开始”菜单中的文件夹
图1-22 安装进度
(7)安装结束后出现一个对话框,提示用户必须重启计算机以完成PyCharm的安装,如图1-23所示。用户可以选中“Reboot now”单选按钮,即刻自动重启计算机,也可以选中“I want to manually reboot later”单选按钮,稍后手动重启计算机。
图1-23 安装结束对话框
1.2.2 配置PyCharm 双击桌面上的PyCharm图标,进入协议界面,勾选“I confirm that I have read and accept the terms of this User Agreement”复选框,同意使用协议,如图1-24所示。
图1-24 协议界面
单击“Continue”按钮,弹出数据共享界面“DATA SHARING”,如图1-25所示,确定是否需要进行数据共享,单击“Don't send”按钮,激活PyCharm启动界面,如图1-26所示。
图1-25 数据共享界面
图1-26 启动界面
PyCharm激活之后会自动跳转到编辑界面,如图1-27所示。该界面包括Projects(项目)、Customize(自定义)、Plugins(插件)、Learn(学习文档)这4个选项卡。
图1-27 编辑界面
打开“Customize”选项卡,在图1-28所示的界面中可以设置编辑器界面参数。
图1-28 “Customize”选项卡
在“Color theme”下拉列表中显示以下主题。
● IntelliJ Light:白色主题,如图1-29所示。本书后续的编辑器界面将采用白色主题进行讲解。
● Darcula:黑色主题,默认选择该选项。
● High contrast:黑色高对比度主题。
图1-29 IntelliJ Light主题
在“Accessibility”选项组中,可以看到“IDE font”默认为“12.0”,用户可以根据需要修改字号。本书将字号设置为“14”。
在“Keymap”选项组中,可以根据需要配置快捷键。
1.2.3 PyCharm的编辑环境 在“Projects”选项卡中单击“New Project”按钮,在弹出的“New Project”对话框中设置项目路径和名称,如图1-30所示。
图1-30 “New Project”对话框
单击“Create”按钮,即可打开PyCharm编辑器界面,并显示创建的项目,如图1-31所示。
图1-31 PyCharm编辑器界面
创建PyCharm项目文件后,需要创建Python文件,才可以进入PyCharm与Python的交互式命令编辑窗口。
创建Python文件有以下两种常用方法。
1.通过菜单命令创建 在PyCharm中创建一个新文件最简便的方法是在“File”→“New”子菜单中选择一种适当的文件类型。
选择菜单栏中的“File”→“New”命令,打开图1-32所示的子菜单。
图1-32 “New”子菜单
选择“Python File”命令,弹出“New Python file”子菜单、Python文件包含下面3种文件类型:Python file(Python文件)、Python unit test(Python单元测试文件)、Python stub(Python存根文件)。
选择“Python file”,输入文件名称“test file01”,如图1-33所示,按Enter键,即可进入新建的文件test file01.py的命令编辑窗口,如图1-34所示。
图1-33 “New Python file”子菜单
图1-34 test file01.py的命令编辑窗口
2.利用右键快捷菜单 右击项目文件,在弹出的右键快捷菜单中选择“New”→“Python File”命令,也可以新建Python文件。
1.2.4 运行Python文件 在PyCharm中运行Python文件常用的方法有以下3种。
● 在Python文件的命令编辑窗口中,在需要运行的代码上右击,从弹出的右键快捷菜单中选择命令“Run”。
● 单击菜单栏下方工具栏中的“Run”按钮 。
● 按Ctrl+Shift+F10快捷键。
如果打开了“Run”面板,单击该面板左侧工具栏中的“Run”按钮 ,也可以运行Python文件。
实例2:第一个Python文件
本实例在PyCharm中创建一个简单的Python文件并运行,帮助读者进一步熟悉PyCharm的工作环境,以及编辑、运行Python文件的操作方法。
操作步骤如下。
(1)在PyCharm中新建一个名为ch01的项目。然后在项目中新建一个名为firstPyFile.py的Python文件。
(2)在firstPyFile.py的命令编辑窗口中编写如下程序:
# 一个简单的Python文件
name = "Alice" # 定义字符串变量name,并赋初值为"Alice"
age = 4 # 数值变量age
print(name, "is", age, "years old!") # 输出变量值
age = age + 1 # 修改变量age的值
print(name, "is", age, "years old now!") # 输出变量值
(3)在命令编辑窗口顶部右击Python文件firstPyFile.py的标签,从弹出的右键快捷菜单中选择“Run 'firstPyFile'”命令,即可打开“Run”面板,显示运行结果,如图1-35所示。
图1-35 运行结果
1.2.5 加载模块库 用Python进行数据分析时常用的模块库有NumPy、SciPy、pandas、Matplotlib,使用pip(pip3)工具或Anaconda在下载、安装这些模块后,可以在IDLE Shell中使用关于数组、矩阵的函数。如果要在PyCharm中使用数据分析模块,则需要另行安装。
(1)打开PyCharm,选择菜单栏中的“File”→“Settings”命令,打开“Settings”对话框。
(2)在左侧的列表框中展开“Project:firstPythonProject”→“Python Interpreter”节点,在右侧的列表框顶部单击“Install”按钮 ,弹出“Available Packages”对话框。
(3)在搜索框中输入需要安装的数组矩阵模块库(例如NumPy),左侧列表框中会自动选择相应的模块库,右侧显示该库的简要说明,如图1-36所示。
图1-36 “Available Packages”对话框
(4)单击“Install Package”按钮,即可安装该模块。安装成功后,在对话框底部显示安装完成的信息,如图1-37所示。
图1-37 包安装成功
(5)安装完成后,关闭“Available Packages”对话框,返回“Settings”对话框。此时在列表框中可以看到当前项目中已加载的包列表。
(6)单击“OK”按钮关闭对话框。
1.2.6 导入模块 模块的应用提高了代码的复用性和可维护性。利用模块,编写代码不必从0开始,当一个模块编写完毕,就可以被其他地方引用,也可以引用其他模块,包括Python内置的模块和来自第三方的模块。使用模块还可以避免函数名和变量名冲突。
下面简要介绍导入模块常用的两个命令。
1)import
Python导入模块一般使用import实现,具体方法如下:
import modename
这种导入方法常用于导入内置模块(如os和sys.time等)或者第三方库,例如:
import sys
提示
一个模块可以在当前位置导入多次,但只有第一次导入会将模块包含的内容加载到内存,并执行源文件内的代码。第二次导入,不会再次执行该模块,只是完成一次引用。
为了简化程序、方便维护,在导入模块时运用as可以重命名模块,例如:
import numpy as np # 导入NumPy模块,重命名为np
# 调用模块中的函数
np.linspace()
np.empty()
2)from…import…
from…import…命令用于导入模块库中的指定模块,而不是所有模块,其调用格式如下:
from modename import funcname
例如:
from os import chown,chmod #导入模块chown和chmod
from A.b import c #从A的子模块b导入模块c
1.3 Python语法基础与其他常见的编程语言相比,Python最突出的特点就是简洁。它用更直观的、符合人们思维习惯的代码,代替了C语言和Fortran语言的冗长代码。本节简要介绍Python的基本语法。
1.3.1 语法规范 1.行宽 每行代码尽量不超过80个字符,便于在控制台查看代码,增强代码可读性。
2.空行 空行并不是Python语法的一部分,其作用主要是分隔两段不同功能或含义的代码,便于代码的维护或重构。
通常,函数之间或类的方法之间用空行分隔,表示一段新的代码的开始。类和函数入口之间也用一行空行分隔,以突出函数入口的开始。其他使用空行的情况如下:
● 模块级函数和定义类之间空两行;
● 类成员方法之间空一行;
● 函数中使用空行分隔逻辑相关的代码。
例如:
class A:
def __init__(self):
pass
def hello(self):
pass
def main():
pass
3.空格 (1)在二元运算符两边各空一格,二元运算符如=、−、+=、==、>、in、is not、and等。例如:
# 规范
i = i + 1
x = x * 2 - 1
# 不规范
i=i+1
x = x*2-1
(2)在函数的参数列表中,逗号、#和冒号之后要有空格。例如:
# 规范
def complex(real, imag):
pass
#不规范
def complex(real,imag):
pass
(3)函数的参数列表中,默认值的等号两边不要添加空格。例如:
# 规范
def complex(real, imag=0.0):
pass
# 不规范
def complex(real, imag = 0.0):
pass
(4)左圆括号之后、右圆括号之前不要加多余的空格。例如:
# 规范
spam(ham[1], {eggs: 2})
# 不规范
spam( ham[1], { eggs : 2 } )
(5)字典对象的左方括号之前不要加多余的空格。例如:
# 规范
dict['key'] = list[index]
# 不规范
dict ['key'] = list [index]
(6)不要使用额外的空格。例如:
# 规范
x = 1
y = 2
# 不规范
x = 1
y = 2
1.3.2 标识符 在程序中自定义的类名、函数名、变量名等名称和符号,称为标识符。在Python中,命名标识符应遵循以下规则。
(1)由ISO Latin-1字符集中的字符(A~Z、a~z)、下画线、数字组成,且第一个字符不能是数字。
(2)标识符中不能包含空格、@、#、¥等特殊字符。
(3)标识符区分字母大小写。
(4)不能使用Python中的保留字。
保留字(reserved word)是指在高级语言中已经定义过的标识符,不能再用于命名变量、函数、类、模块和其他对象,否则会报错。Python中的保留字也区分字母大小写。执行下面的命令,可以查看Python的所有保留字。
>> > import keyword
>> > print(keyword. kwlist)
['False', 'None', 'True', 'and', 'as', 'assert', 'async', 'await', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'nonlocal', 'not', 'or', 'pass', 'raise', 'return', 'try', 'while', 'with', 'yield']
(5)以下画线(_)开头的标识符具有特殊的意义,一般应避免使用相似的标识符。
以单下画线开头(_×××)的标识符表示不能直接访问的类属性,也不能通过from…import…语句导入;以双下画线开头(__×××)的标识符表示类的私有成员;以双下画线开头和结尾(__××__)的是Python中专用的标识符,表示构造函数。
(6)不使用汉字作为标识符,虽然不会报错,但是不建议使用。
下面举例介绍几种标识符:
No_1=103 # 合法标识符
age#$=18 # 包含特殊符号,不合法
32name="a" # 以数字开头,不合法
type="month" # type是Python关键字,不合法
a=1 # 合法的标识符,但不建议使用,最好使用具有特定意义的变量名
1.3.3 基本符号 Python语言基于C++,因此语法特征与C++语言的极为相似,而且更加简单,更加符合科技人员对数学表达式的书写格式。
Python中不同的数字、字符、符号代表不同的含义,可以组成丰富的表达式,能满足用户的各种需求。本节将按照不同的命令生成方法简要介绍各种符号的功能。
1.命令提示符 命令行“头首”的“>>>”是自动生成的命令提示符,表示Python处于准备就绪状态,如图1-38所示。在命令提示符后输入一条命令或一段程序后按Enter键,Python将给出相应的结果,然后再次显示一个命令提示符,为输入下一段程序做准备。在脚本文件中,指令前没有命令提示符,如图1-39所示。
图1-38 命令编辑窗口
图1-39 脚本文件
下面介绍几种常见的命令输入过程中的错误及显示的警告与错误信息。
(1)输入的圆括号为中文格式,例如:
>>> range(5)
SyntaxError: invalid character '(' (U+FF08)
在输入命令时,应在英文状态下输入。
(2)函数使用格式错误,例如:
>>> range(5]
SyntaxError: closing parenthesis ']' does not match opening parenthesis '('
(3)未定义变量,例如:
>>> range(data)
Traceback (most recent call last):
File "<pyshell#9>", line 1, in <module>
range(data)
NameError: name 'data' is not defined
与一些编程语言不同,在Python中,换行与缩进不仅是为了增强代码的可读性,而且是Python语法规范的一部分。
2.换行 Python支持在圆括号内换行,有以下5种情况。
(1)第二行缩进到圆括号的起始处,例如:
foo = long_function_name(var_one, var_two,
var_three, var_four)
(2)第二行缩进 4 个空格,适用于起始圆括号后就换行的情况,例如:
def long_function_name(
var_one, var_two, var_three,
var_four):
pass
(3)使用反斜线\(续行符号)换行。二元运算符+和.等应出现在行末。当代码行较长时,也可以用这种方法换行,例如:
session.query(MyTable).\
filter_by(id=1).\
one()
print 'Hello, '\
'%s %s!' %\
('Harry', 'Potter')
(4)避免同一行出现多条语句,例如:
# 规范
do_first()
do_second()
do_third()
# 不规范
do_first();do_second();do_third();
(5)在选择结构中要换行,例如:
# 规范
if foo == 'blah':
do_blah_thing()
# 不规范
if foo == 'blah': do_blash_thing()
3.缩进 在Python中,缩进量是可变的,但是所有代码块语句必须包含相同的缩进量。通常统一使用4个空格进行缩进,例如:
if True:
print ("True")
else:
print ("False")
有时也按1次Tab键进行缩进,但由于按Tab键不一定输出4个空格,因此有时会出错。在缩进代码时,应使用统一的形式进行缩进,尽量避免有的地方使用Tab键进行缩进,有的地方使用空格缩进。
1.3.4 功能符号 除了命令输入必需的符号外,Python为了解决命令输入过于烦琐、复杂的问题,提供了注释符号和续行符号。
1.注释符号 注释用于对代码功能进行解释说明,以增强代码的可读性。注释可以出现在代码中的任何位置。Python解释器在执行代码时会忽略注释,不做任何处理。
提示
利用注释符号的特点,在调试程序时,可以使用注释符号屏蔽可能存在错误的代码,让Python解释器忽略这段代码运行,以此缩小错误所在的范围,提高程序调试效率。
Python支持两种类型的注释:单行注释和多行注释。
1)单行注释
Python使用井号(#)作为单行注释符号,语法格式为:
# 注释内容
从井号开始,直到这行行末的所有内容都是注释。对多行代码的功能进行说明时,一般将注释放在代码的上一行;对单行代码的功能进行说明时,通常将注释放在代码的右侧。
2)多行注释
多行注释内有多行内容(包含一行),通常用于为Python文件、模块、类或者函数等添加版权或者功能描述信息。
Python使用英文状态下3个连续的单引号'''或者3个连续的双引号"""创建多行注释,引号内的内容全部是注释内容,例如:
"""
第一行注释
第二行注释
"""
Python多行注释不支持嵌套,因此下面的写法是错误的:
'''
外层注释
'''
内层注释
'''
'''
不管是单行注释还是多行注释,当注释符号作为字符串的一部分出现时,就不能再将它们视为注释符号,而应该看作正常代码的一部分,例如:
>>> print('''Hello, Python!''')
>>> print("""Welcome to Python!""")
运行结果如下:
Hello, Python!
Welcome to Python!
2.续行符号 在编写Python语句时,如果语句太长或出于某种需要,可使用续行符号(\)将长语句进行多行书写,例如:
>>> content = [' 销售产品、提供劳务收到的现金', ' 收到其他与经营活动有关的现金',\
' 购买原材料、接受劳务支付的现金', ' 支付的职工薪酬', ' 支付的税费']
>>> print(content)
运行结果如下:
[' 销售产品、提供劳务收到的现金', ' 收到其他与经营活动有关的现金', ' 购买原材料、接受劳务支付的现金', ' 支付的职工薪酬', ' 支付的税费']
1.3.5 Python数据类型 数据类型是用一组属性描述其定义、标识、表示和允许值的数据单元。
按照数据的结构进行分类,Python中的数据类型主要包括number(数值)、string(字符串)、list(列表)、tuple(元组)、range(区间)、set(集合)、dictionary(字典)。
1.数值 这里的数值指由阿拉伯数字和一些特殊字符组成的单个的数值,而不是由一组组的数值组成的对象。
2.字符串 字符串主要由26个英文字母及空格等一些特殊符号组成,在Python中使用单引号或双引号创建,例如'Python'和"my hometown"。Python不支持单字符类型,单字符(例如'P')也是作为一个字符串使用的。
提示
单引号与双引号的作用其实是一样的,如果引号中要包含单引号或双引号,可以使用转义字符\'或\"。例如,''字母\''x\''要加粗''。
如果要创建一个包含换行符、制表符以及其他特殊字符的跨多行的复杂字符串,可以使用三引号。例如,'''hello.
Nice to meet you'''表示创建一个包含换行符,占据两行的字符串。
Python的字符串有2种取值顺序:
● 从左到右索引默认从0开始,最大值是字符串长度−1;
● 从右到左索引默认从−1开始,最小值是字符串长度的负数。
例如:
>>> name = 'James Zhou' # 创建字符串变量
>>> name # 显示字符串变量
'James Zhou'
>>> name[0] # 显示变量从左到右索引为0的元素,即第1个元素
'J'
>>> name[-4] # 显示变量从右到左索引为-4的元素,即从右到左第4个元素
'Z'
3.列表 Python列表是任意对象的有序集合,列表通常由方括号“[]”创建,元素之间用逗号分隔。这里的任意对象,既可以是列表,也可以是字符串,例如:
>>> student = ['name',['Wang','Li'],'Age',[20,23]]
>>> student
运行结果如下:
['name', ['Wang', 'Li'], 'Age', [20, 23]]
每个列表变量中的元素从0开始计数,利用方括号引用索引,可以选取列表中的特定元素。例如,下面的代码分别用于选取列表student的第1个和第3个元素。
>>> student[0]
'name'
>>> student[2]
'Age'
如果要移除列表中某个值的第一个匹配项,可以使用remove函数,在变量名称后使用圆点表示法即可轻松调用,语法格式如下:
list.remove(obj)
其中,list为列表变量的名称,参数obj为列表中要移除的对象。该语法格式不返回值,但是会移除列表list中与指定值匹配的第一项。
实例3:列表操作
本实例通过创建一个列表,然后删除列表中的指定元素,帮助读者进一步掌握创建列表以及引用列表元素的方法。
启动Python解释器IDLE Shell 3.11.0,在命令编辑窗口执行以下程序:
>>> A="lunch" # 创建字符串A
>>> B='panda' # 创建字符串B
>>> C= "lunch" # 创建字符串C
>>> ls=[A,B,C] # 创建列表变量ls
>>> ls # 显示列表变量ls
['lunch', 'panda', 'lunch']
>>> ls[1] # 显示列表变量ls中索引为1的元素,即第2个元素
'panda'
>>> ls.remove('lunch') # 删除列表变量ls中值为'lunch'的第一个匹配项
>>> ls
['panda', 'lunch']
>>> ls=[ls,"box"] # 嵌套列表
>>> ls
[['panda', 'lunch'], 'box']
4.元组 元组与列表类似,其不同之处在于元组的元素不能修改。元组变量通过圆括号“()”创建,元素之间用逗号分隔。
例如,下面的代码用于创建一个元组变量info,然后显示变量info的类型:
# 创建元组变量
>>> info = ('trade mark',('A','B','C','D'),'price',(18,21,20,19))
>>> type(info) # 显示变量的类型
运行结果如下:
<class 'tuple'>
显示创建的变量类型为元组“tuple”。
5.区间 区间类似于一个整数列表,使用range函数创建。该函数的调用格式如下:
range(start, stop[, step])
参数说明如下。
● start:起始值为start,默认从0开始。使用默认起始值时,该参数可省略。例如,range(6)等价于range(0,6)。
● stop:结束值为stop−1。例如,range(2,6)的值为[2,3,4,5]。
● step:步长值,默认为1。使用默认步长值时,该参数可省略。例如,range(2,6)等价于range(2,6,1)。
注意
在Python 3.x中,range函数返回的是一个可迭代对象(类型是对象),而不是列表,因此输出时不会输出列表。
6.集合 集合是一个没有重复元素的无序序列,可以使用花括号“{}”或者set函数创建。
注意
空集不能使用花括号创建,必须使用set函数创建。
例如,下面的代码用于创建一个集合变量fruits,并显示变量的类型:
# 创建集合变量
>>> fruits = {'orange','peach','banana','pear'}
>>> type(fruits) # 显示变量的类型
运行结果如下:
<class 'set'>
显示创建的变量类型为集合“set”。
7.字典 字典是一种可存储任意类型对象的可变容器模型。在Python中,字典是除列表以外,最灵活的内置数据类型。
字典通常由“{}”创建,是一个无序的键(key)值(value)对的集合,语法格式如下:
dic = {key1 : value1, key2:value2}
例如,下面的代码用于创建一个字典information,并输出该变量的值:
>>> information = {'name':'Alice', 'age':'21'}
>>> print(information)
其中,name和age是键,Alice和21是对应的值。
运行结果如下:
{'name': 'Alice', 'age': '21'}
1.3.6 程序结构 程序结构是指程序的流程控制结构。Python的程序结构大致可分为图1-40所示的顺序结构、选择结构与循环结构。
顺序结构 选择结构 循环结构
图1-40 3种程序结构
1.顺序结构 顺序结构是最简单、最易学的一种程序结构。它由多个Python语句顺序构成,各语句之间用分号“;”隔开,若不加分号,则必须分行编写。程序执行时也是由上至下进行的。
2.选择结构 选择结构也称为分支结构,根据条件是否满足执行不同的分支,较常用的是if-else结构。根据分支的多少,Python分支结构可分为单分支结构、二分支结构、多分支结构。它的一般形式为:
if 表达式:
语句块
3.循环结构 在利用Python进行数值实验或工程计算时,用得最多的是循环结构。循环结构是指为在程序中反复执行某个语句块而设置的一种程序结构。它根据循环体中的条件判断是继续执行某个语句块还是退出循环。在循环结构中,被重复执行的语句块称为循环体。Python常用的循环结构有两种:for循环与while循环。
1)for循环
在for循环中,循环次数一般情况下是已知的,除非用其他语句提前终止循环。这种循环以for开头,其一般形式为:
for <variable> in <sequence>:
<statements>
else:
<statements>
在每次循环中,迭代变量<variable>用于接收迭代对象<sequence>中元素的值,变量每取一次值,循环便执行一次,直到迭代完对象的最后一项。
如果需要遍历数字序列,可以使用range函数生成数字序列作为迭代对象,执行有限次数的循环。如果迭代对象是列表或者字典,此时迭代变量表示列表或者字典中的元素。
2)while循环
如果不知道所需要的循环到底要执行多少次,可以选择while循环,这种循环以while开头,其一般形式如下:
while 表达式:
可执行语句1
…
可执行语句n
其中的表达式即循环控制语句,它一般是由逻辑运算或关系运算,以及一般运算组成的表达式。如果表达式的值非0,则执行一次循环,否则停止循环。一般来说,能用for循环实现的程序也能用while循环实现。
实例4:求分段函数的值
本实例利用选择结构求分段函数 的值。
操作步骤如下。
(1)在PyCharm中打开项目ch01。然后在项目中新建一个名为piecewiseFunction.py的Python文件。
(2)在piecewiseFunction.py的命令编辑窗口中编写如下程序:
# 这个文件使用 if-elif-else结构求分段函数f(x)的值
# 当x<−1时,f(x)=3x+2
# 当−1≤x≤1时,f(x)=x
# 当x>1时,f(x)=2x+3
x = 2 # 定义变量
if x < -1:
y = 3 * x + 2
elif -1 <= x & x <= 1:
y = x
else:
y = 2 * x + 3
print('当x=', x, '时,y=', y)
在文件functionValue.py上右击,从弹出的右键快捷菜单中选择“Run”命令,运行文件,即可打开“Run”面板,显示运行结果,如图1-41所示。
图1-41 运行结果
选择菜单栏中的“Tools”→“Python or Debug Console”命令,在PyCharm中打开“Python Console”,并显示命令提示符“>>>”,如图1-42所示。
图1-42 “Python Console”编辑环境
在这里可以输入命令并运行。例如,输入如下命令:
>>> x=-2
>>> y=3*x+2
>>> print('当x=',x,'时,f(x)=',y)
运行结果如图1-43所示。
图1-43 运行结果
1.3.7 常用的输入、输出函数 在编写程序时,经常会需要接收用户输入、输出计算结果,以实现程序与用户的交互。本节介绍Python常用的输入输出函数。
1.input函数 input函数用于提示用户从键盘输入数据、字符串或者表达式,并接收输入值。其调用格式如下:
input(prompt)
这种格式是以文本字符串prompt为信息给出用户提示,将用户输入的内容赋值给变量,返回字符串。
实例5:录入商品信息
本实例使用input函数接收用户从键盘输入的商品信息。
操作步骤如下。
(1)启动PyCharm,打开名为ch01的项目。然后在该项目中新建一个名为productsInfo.py的Python文件。
(2)在productsInfo.py的命令编辑窗口中输入如下程序:
# 这个文件演示input函数的用法
print('*'*20, '商品信息录入', '*'*20)
name = input('商品名称:')
num = input('数量:')
price = input('单价:')
(3)运行程序,结果如图1-44所示。
图1-44 运行结果
在运行程序时,首先输出标题信息,并输出第一条提示信息“商品名称:”,用户从键盘输入“保温杯”,按Enter键,输出第二条提示信息“数量:”。用户从键盘输入商品数量后,按Enter键,输出第三条提示信息“单价:”,等待用户输入。输入单价后,按Enter键,程序结束。
2.print函数 print函数用于输出。其调用格式如下:
print(objects, sep=' ', end='\n', file=sys.stdout, flush=False)
参数说明如下。
● objects:表示输出的多个对象。输出多个对象时,各个对象之间需要用逗号(,)分隔。
● sep:指定输出的多个对象之间的分隔符,默认值是一个空格。
● end:指定用于结束输出内容的字符,默认值是换行符(\n)。
● file:指定要写入的文件对象。
● flush:输出是否被缓存通常取决于file参数,但如果flush关键字参数为True,内容会被强制刷新。
实例6:输出录入的商品信息
本实例使用print函数输出上一个实例中录入的商品信息。
操作步骤如下。
(1)启动PyCharm,打开名为ch01的项目。然后在该项目中新建一个名为printInfo.py的Python文件。
(2)在printInfo.py的命令编辑窗口中输入如下程序:
# 这个文件演示print函数的用法
print('*'*20, '商品信息录入', '*'*20)
# 录入信息
name = input('商品名称:')
num = input('数量:')
price = input('单价:')
# 输出明细
print('*'*20, '商品明细', '*'*20)
print('名称', '数量', '单价', sep='\t'*2)
print(name, '\t', num, '\t', price)
(3)运行程序,结果如图1-45所示。
图1-45 运行结果
使用print函数输出数据时,还可以像其他编程语言(如C)一样,自定义数据输出格式,实现数据的格式化输出。在这里要提请使用过C语言的读者注意,Python中的格式控制符和转换说明符用%分隔,而不是逗号。例如:
print('字符串%s的长度为%d' % (s1, n))
其中,'字符串%s的长度为%d'称为格式控制符,(s1, n)称为转换说明符,转换说明符左侧的%用于标记转换说明符的开始。
Python格式控制符如表1-1所示。
表1-1 Python格式控制符
格式控制符
说 明
%s
字符串采用str类型表示
%d
有符号十进制整数
%b
二进制整数
%o
八进制整数
%x
十六进制整数
%c
单个字符
%e或%E
基底为e或E的指数
%f或%F
浮点数
%%
百分号(%)
在格式控制符中通常还指定最小字段宽度、精度和转换标志。最小字段宽度用于指定转换后的字符串至少应该具有的宽度(小数点也占一位)。如果最小字段宽度是*(星号),则从元组中读取宽度。圆点(.)后跟精度值,如果要输出实数,精度值表示出现在小数点后的位数;如果要输出字符串,精度值表示最大字段宽度;如果是*,则从元组中读取精度。例如:
r = 5.142536
# 指定最小字段宽度为6,精度为2
print('半径为%6.2f ' % r) # 半径为 5.14
print("半径为%*.4f" % (6,r)) # 半径为5.1425
转换标志可以设置数据输出的对齐方式,是否添加符号、空格或0。其中,负号(−)表示左对齐;加号(+)表示在数值前要加上正负号;" "(空格)表示正数之前保留空格;0表示如果转换值位数不够就用0填充。
实例7:输出产品销售额
本实例使用print函数按指定格式输出某产品的销售额。
操作步骤如下。
(1)启动PyCharm,打开名为ch01的项目。然后在该项目中新建一个名为salesPrint.py的Python文件。
(2)在salesPrint.py的命令编辑窗口中输入如下程序:
# 此文件输出某产品的销售额,演示数据的格式化输出
print('*'*20, 'A产品销售额', '*'*20)
print('产品名称:', 'A')
print('销量(kg):245.32', '单价(元):36.89', sep='\n')
# 计算销售额
sales = 245.32 * 36.89
# 输出结果
print('销售额(元):', sales) # 使用默认格式
print(' 保留2位小数为:%10.2f' % sales) # 指定最小字段宽度为10,精度为2
print(" 保留3位小数为:%.*f" % (3, sales)) # 从元组读取精度3
print(" 保留2位小数,数据左对齐为:%-10.2f" % sales)
print(" 保留2位小数,显示正负号:%+10.2f" % sales)
print(" 保留2位小数,保留空格:% 10.2f" % sales)
print(" 保留2位小数,用0填补:%010.2f" % sales)
(3)运行程序,结果如图1-46所示。
图1-46 运行结果
从运行结果中可以看到,在输出精度为2的销售额时,由于指定最小字段宽度为10,而销售额的位数为7,小于10,所以在输出值左边填补了3个空格。输出保留3位小数的销售额时,在格式控制符中使用了星号(*),因此从后面的元组(3, sales)读取精度3。由于没有指定最小字段宽度,因此输出时不会额外填补空格进行缩进。
如果指定了转换标志负号(−),输出数据时左对齐,即使数据位数小于指定的最小字段宽度,也不会自动填补空格。如果指定了转换标志0,则在转换值位数小于指定的最小字段宽度时,在数据左侧用0填补。