![Python数据科学零基础一本通](https://wfqqreader-1252317822.image.myqcloud.com/cover/273/31904273/b_31904273.jpg)
第4章 基本输入与输出
本章摘要
4-1 Python的辅助说明help( )
4-2 格式化输出数据使用print( )
4-3 输出数据到文件
4-4 数据输入input( )
4-5 处理字符串的数学运算eval( )
4-6 列出所有内建函数dir( )
4-7 专题——温度转换/房贷问题/正五角形面积/计算经纬度距离
本章将介绍如何在屏幕上进行输入与输出,另外也将讲解Python内建的实用功能。
4-1 Python的辅助说明help( )
help( )函数可以列出某一个Python指令或函数的使用说明。
实例:列出输出函数print( )的使用说明。
![](https://epubservercos.yuewen.com/371221/17274856804199906/epubprivate/OEBPS/Images/Figure-P59_33993.jpg?sign=1739204715-tISoY8nI3YcW9eAqjEHrZZk2PxE6ry0x-0-195e8d6dddb34e92aeb1ef1286d8aa1e)
当然程序语言是全球化的语言,所有说明是以英文为基础,要有一定的英文能力才可彻底了解,不过笔者在本书中会详尽地用中文引导读者入门。
4-2 格式化输出数据使用print( )
相信读者经过前三章的学习,对于使用print( )函数输出数据已经非常熟悉了,现在是时候完整解说这个输出函数的用法了。
4-2-1 函数print( )的基本语法
print( )的基本语法格式如下:
print(value, … , sep=" ", end="\n", file=sys.stdout, flush=False)
value:表示想要输出的数据,可以一次输出多个数据,各数据间以逗号隔开。
sep:当输出多个数据时,可以插入各数据的分隔字符,默认是一个空格。
end:当数据输出结束时所插入的字符,默认是插入换行字符,所以下一次print( )函数的输出会在下一行输出。如果想让下次输出不换行,可以在此设置空字符串,或是空格或是其他字符串。
file:数据输出位置,默认是sys.stdout,也就是屏幕。也可以使用此设置,将输出导入其他文件或设备。
flush:是否清除数据流的缓冲区,默认是不清除。
程序实例ch4_1.py:重新设计ch3_18.py,其中在第二个print( )中两个输出数据的分隔字符是“ $$$”。
![](https://epubservercos.yuewen.com/371221/17274856804199906/epubprivate/OEBPS/Images/Figure-P60_34460.jpg?sign=1739204715-heLeVMY6YZs3eJldoZOMlOTUF26LzuGJ-0-6dc32b25c8e3132e42f00dfd6d39cdab)
执行结果
![](https://epubservercos.yuewen.com/371221/17274856804199906/epubprivate/OEBPS/Images/Figure-P60_34463.jpg?sign=1739204715-SjVfmaN0cNnz8p24DxYkwfmmuGjQGY2V-0-9988e4169ab8077068ec81eb7a6d258a)
程序实例ch4_2.py:重新设计ch4_1.py,将两个数据在同一行输出,彼此之间使用Tab键的距离隔开。
![](https://epubservercos.yuewen.com/371221/17274856804199906/epubprivate/OEBPS/Images/Figure-P60_34466.jpg?sign=1739204715-nCbtigKs4HhaT71TsBtNOl5c6IqLVIlh-0-839ddbe6d868a5883944207992785eac)
执行结果
![](https://epubservercos.yuewen.com/371221/17274856804199906/epubprivate/OEBPS/Images/Figure-P60_34469.jpg?sign=1739204715-OJXROsS81Qn5DR8sf4zaWtB6HGFB7a7Y-0-120333c2e50ce912f3fd5faba175a633)
4-2-2 格式化print( )输出
在使用格式化输出时,基本使用格式如下:
print(" …输出格式区… " % ( 变量系列区, … ))
在上述输出格式区中,可以放置变量系列区相对应的格式化字符,这些格式化字符的基本意义如下。
%d:格式化整数输出。
%f:格式化浮点数输出。
%x:格式化十六进制整数输出。
%X:格式化大写十六进制整数输出。
%o:格式化八进制整数输出。
%s:格式化字符串输出。
%e:格式化科学记数法e的输出。
%E:格式化科学记数法大写E的输出。
程序实例ch4_3.py:格式化输出的应用。
![](https://epubservercos.yuewen.com/371221/17274856804199906/epubprivate/OEBPS/Images/Figure-P61_34918.jpg?sign=1739204715-qiTPurvaDAH8UERWlLci6yNq2Tz1xnse-0-03d2dbe6d8098dfe22f51ca993503bfa)
执行结果
![](https://epubservercos.yuewen.com/371221/17274856804199906/epubprivate/OEBPS/Images/Figure-P61_34921.jpg?sign=1739204715-pTVR9ARVAjdZELnD9PKFZymZxy1O8KL0-0-0afdb8ef30027da091cc951c1cbb7da9)
设计程序时,在print( )函数内的输出格式区也可以用一个字符串变量取代。
程序实例ch4_4.py:重新设计ch4_3.py,在print( )内用字符串变量取代字符串列,读者可以参考第5行和第6行与原先ch4_3.py的第5行做比较。
![](https://epubservercos.yuewen.com/371221/17274856804199906/epubprivate/OEBPS/Images/Figure-P61_34924.jpg?sign=1739204715-Gjd5uLGQKUZIexXl4eRyQolxbQtsGhyG-0-a25a1c440d6d6b81a96ec814dc88b18b)
执行结果 与ch4_3.py相同。
程序实例ch4_5.py:格式化十六进制和八进制输出的应用。
![](https://epubservercos.yuewen.com/371221/17274856804199906/epubprivate/OEBPS/Images/Figure-P61_34928.jpg?sign=1739204715-UCaiKNoExoQzPXEj7QXDoI4JdNRTncgc-0-cab8f512e0ad51a44851409be2681743)
执行结果
![](https://epubservercos.yuewen.com/371221/17274856804199906/epubprivate/OEBPS/Images/Figure-P61_34931.jpg?sign=1739204715-2nCqXJt7DnE2JOfi69HuS6RzEcjWZbIQ-0-00500fd59fba6de14362944ddd5a1a72)
程序实例ch4_6.py:将整数与浮点数分别以%d、%f、%s格式化,同时观察执行结果。特别要注意的是,浮点数以整数%d格式化后,小数数据将被舍去。
![](https://epubservercos.yuewen.com/371221/17274856804199906/epubprivate/OEBPS/Images/Figure-P61_34934.jpg?sign=1739204715-bhhk7AcWtz99k9pTU9VZy5Ev1JH6UNo5-0-7875cb46d837b2cecbe45b318ade9aaa)
执行结果
![](https://epubservercos.yuewen.com/371221/17274856804199906/epubprivate/OEBPS/Images/Figure-P61_34937.jpg?sign=1739204715-8sXrKZv48zS8ZI4rKCz48OCfeVKugtz4-0-469e2f522e9cf4d07cc82a8443ff9dcb)
下列是使用%x和%X格式化数据输出的实例。
![](https://epubservercos.yuewen.com/371221/17274856804199906/epubprivate/OEBPS/Images/Figure-P62_35401.jpg?sign=1739204715-z5NmPDydD2WDWgT1lBHnT4y81VM06p4q-0-04c42bb2818b951c1aeffa789b0bed37)
下列是使用%e和%E格式化科学记数法数据输出的实例。
![](https://epubservercos.yuewen.com/371221/17274856804199906/epubprivate/OEBPS/Images/Figure-P62_35404.jpg?sign=1739204715-knZElB3CWCmUCtKJl709aogrsTn3rcMe-0-7839dd8d41514e6c9fb6ef63af154fa5)
4-2-3 精准控制格式化的输出
在上述程序实例ch4_6.py中,我们发现最大的缺点是无法精确地控制浮点数的小数输出位数,print( )函数在格式化过程中,可以让我们设置保留多少格的空间让文件做输出,此时格式化的语法如下。
%(+|-)nd:格式化整数输出。
%(+|-)m.nf:格式化浮点数输出。
%(+|-)nx:格式化十六进制整数输出。
%(+|-)no:格式化八进制整数输出。
%(-)ns:格式化字符串输出。
%(-)m.ns:m是输出字符串宽度,n是显示字符串长度,n小于字符串长度时会有裁减字符串的效果。
%(+|-)e:格式化科学记数法e输出。
%(+|-)E:格式化科学记数法大写E输出。
上述格式对浮点数而言,m代表保留多少格数供输出(包含小数点),n则是小数数据保留格数。至于其他的数据格式,n则是保留多少格数空间,如果保留格数空间不足将完整输出数据,如果保留格数空间太多则数据靠右对齐。
如果是格式化数值数据或字符串数据有加上负号(-),表示保留格数空间有多余时,数据将靠左输出。如果是格式化数值数据有加上正号(+),如果输出数据是正值时,将在左边加上正值符号。
程序实例ch4_7.py:格式化输出的应用。
![](https://epubservercos.yuewen.com/371221/17274856804199906/epubprivate/OEBPS/Images/Figure-P62_35408.jpg?sign=1739204715-IBXsvw9tGYTFO60cl61DMhGrQAveUS18-0-f8df7805d444772b562de78cf25fe1cd)
执行结果
![](https://epubservercos.yuewen.com/371221/17274856804199906/epubprivate/OEBPS/Images/Figure-P63_35838.jpg?sign=1739204715-V6Ksi72VlEkRcsBayGfw7lj6pSGmvaHh-0-ab0d685089b7f474b8983f6917109e7e)
程序实例ch4_8.py:格式化输出,靠左对齐的实例。
![](https://epubservercos.yuewen.com/371221/17274856804199906/epubprivate/OEBPS/Images/Figure-P63_35841.jpg?sign=1739204715-gDm3L5BUZVIPX1gIjhM7HWkzbpNu1hFM-0-853a4643e79787df4225defc4dc05c43)
执行结果
![](https://epubservercos.yuewen.com/371221/17274856804199906/epubprivate/OEBPS/Images/Figure-P63_35844.jpg?sign=1739204715-dCxfRq2MN6l8BIp0SnFui26c5rQ95UCO-0-0094f0dd10ca324f06e3ce24090e836d)
程序实例ch4_9.py:格式化输出,正值数据将出现正号(+)。
![](https://epubservercos.yuewen.com/371221/17274856804199906/epubprivate/OEBPS/Images/Figure-P63_35847.jpg?sign=1739204715-nMHV5zCzHi25wNIr7B2e2wuyL8iKAtTt-0-eff327a45f8ab40e076d801a9597b79e)
执行结果
![](https://epubservercos.yuewen.com/371221/17274856804199906/epubprivate/OEBPS/Images/Figure-P63_35850.jpg?sign=1739204715-J0PR5Ue02utnt215vqtRs7LJvNapNVK2-0-33a7faf80b37f2fb05aeae66d5cdddea)
程序实例ch4_10.py:格式化输出的应用。
![](https://epubservercos.yuewen.com/371221/17274856804199906/epubprivate/OEBPS/Images/Figure-P63_35853.jpg?sign=1739204715-NuxEex7fiLgxZEyIi5hKcgDql1QJGUXM-0-b92f054bff1ca348182de100096969c4)
执行结果
![](https://epubservercos.yuewen.com/371221/17274856804199906/epubprivate/OEBPS/Images/Figure-P63_35856.jpg?sign=1739204715-nrm8XrxQZU8SHjdZyjjTas25MMDYiq05-0-7994fb5f908ef51899d511627bec1ef1)
下面是格式化科学记数法e和E输出的应用。
![](https://epubservercos.yuewen.com/371221/17274856804199906/epubprivate/OEBPS/Images/Figure-P64_36318.jpg?sign=1739204715-WS82aRLZAdjkDXdmU88kOCvcmRbLaUNU-0-dd69b06874d4ee45f3202c720573a2cb)
对于格式化字符串有一个特别的是使用“%m.n”方式格式化字符串,这时m是保留显示字符串空间,n是显示字符串长度,如果n的长度小于实际字符串长度,会有裁减字符串的效果。
![](https://epubservercos.yuewen.com/371221/17274856804199906/epubprivate/OEBPS/Images/Figure-P64_36321.jpg?sign=1739204715-jCXVZtWldyQHsXxVt66AUssZh4HGuGEK-0-ebd9b4805637aa31797124b3bc5a9c38)
4-2-4 format( )函数
这是Python增强版的格式化输出功能,是字符串使用format方法做格式化的动作,基本使用格式如下:
print(" …输出格式区… " .format( 变量系列区, … ))
在输出格式区内的变量使用“{ }”表示。
程序实例ch4_11.py:使用format( )函数重新设计ch4_3.py。
![](https://epubservercos.yuewen.com/371221/17274856804199906/epubprivate/OEBPS/Images/Figure-P64_36325.jpg?sign=1739204715-48DFlx42ltwq3dC6FPo8gyYzUtuyUAfB-0-cc5dc710155b11eceb198aaf90953833)
执行结果 与ch4_3.py相同。
程序实例ch4_12.py:以字符串代表输出格式区,重新设计ch4_11.py。
![](https://epubservercos.yuewen.com/371221/17274856804199906/epubprivate/OEBPS/Images/Figure-P64_36329.jpg?sign=1739204715-dmczhE7Yh1QL51ou8USK7M73Yvv9Lqjl-0-4c3f9c2a01e6df577252c23f3c35e18c)
执行结果 与ch4_3.py相同。
在使用{ }代表变量时,也可以在{ }内增加编号n,此时n将是format( )内变量的顺序,编号从0开始计算,变量多时方便了解变量的顺序。
程序实例ch4_12_1.py:重新设计ch4_12.py,在{ }内增加编号。
![](https://epubservercos.yuewen.com/371221/17274856804199906/epubprivate/OEBPS/Images/Figure-P64_36332.jpg?sign=1739204715-NXhaCYMYqqw3Mk9A8SZYFENxNoL2eFHs-0-5a021a36be0fdd9efdcb21cbdfd6453a)
执行结果
![](https://epubservercos.yuewen.com/371221/17274856804199906/epubprivate/OEBPS/Images/Figure-P65_36790.jpg?sign=1739204715-1YnYEop8b5oM0M3QtexJYcvrrXbSRvji-0-55af839a52a416dc151f586e7a176d15)
也可以在format( )内使用具名参数。
程序实例ch4_12_2.py:使用具名参数,重新设计ch4_12_1.py。
![](https://epubservercos.yuewen.com/371221/17274856804199906/epubprivate/OEBPS/Images/Figure-P65_36793.jpg?sign=1739204715-d3DVkkLlgsZOA4sNH1GfU7SDbxGJIENX-0-45087c5c45504f70625be7b18bcc41ab)
执行结果
![](https://epubservercos.yuewen.com/371221/17274856804199906/epubprivate/OEBPS/Images/Figure-P65_36796.jpg?sign=1739204715-9dw5DfAUo9b8D3hTZn32oaxuxtyUyacj-0-1e734ef11c474ac91ad2ea069c266b0f)
也可以将4-2-2节所述格式化输出数据的概念应用于format( ),例如,d是格式化整数、f是格式化浮点数、s是格式化字符串等。传统的格式化输出是使用%配合d、s、f,使用format则是使用“:”,可参考下列实例第5行。
程序实例ch4_12_3.py:计算圆面积,同时格式化输出。
![](https://epubservercos.yuewen.com/371221/17274856804199906/epubprivate/OEBPS/Images/Figure-P65_36799.jpg?sign=1739204715-vI0jFS3x8AzQjRf1dRLTyrMVOP9qhZtc-0-aa435b86e0cf654591f2bd74337e1591)
执行结果
![](https://epubservercos.yuewen.com/371221/17274856804199906/epubprivate/OEBPS/Images/Figure-P65_36802.jpg?sign=1739204715-mM55e7Zby5E2XGYSqI9m2qRLXNaJjoUR-0-167e658df2eb12c7b3b6da6447c7c98d)
在使用格式化输出时默认是靠右输出,也可以使用下列参数设置输出对齐方式。
>:靠右对齐
<:靠左对齐
^:居中对齐
程序实例ch4_12_4.py:输出对齐方式的应用。
![](https://epubservercos.yuewen.com/371221/17274856804199906/epubprivate/OEBPS/Images/Figure-P65_36805.jpg?sign=1739204715-8lmHMCX5DdjrOKDfrJ2n33V3Z0fHvdJS-0-2b7c3418c64a87517e19ab2a7d9cc73e)
执行结果
![](https://epubservercos.yuewen.com/371221/17274856804199906/epubprivate/OEBPS/Images/Figure-P65_36808.jpg?sign=1739204715-eqiTiuEwHgTah5XCREGHf1uduGHMroFa-0-8d07d11faada09382d8ad4fb1dcb0026)
在使用format输出时也可以使用填充字符,字符是放在“:”后面,在<、^、>或指定宽度之前。
程序实例ch4_12_5.py:填充字符的应用。
![](https://epubservercos.yuewen.com/371221/17274856804199906/epubprivate/OEBPS/Images/Figure-P66_37284.jpg?sign=1739204715-qkS2sR8iXgCZAFzdHIvLrfFSmIyVf3r3-0-d5cd7c185c303be47e0445c35b33d90d)
执行结果
![](https://epubservercos.yuewen.com/371221/17274856804199906/epubprivate/OEBPS/Images/Figure-P66_37287.jpg?sign=1739204715-n4DhGDELNoUUg2DeOoHR9aUAzKa3EFr8-0-d2f643509c7da12dcb2b877d8acd04b5)
4-2-5 字符串输出与基本排版的应用
适度利用输出格式,可以制作一封排版的信件,以下程序的前3行会先利用sp字符串变量建立一个含40格的空白格数,然后产生对齐效果。
程序实例ch4_12_6.py:有趣排版信件的应用。
![](https://epubservercos.yuewen.com/371221/17274856804199906/epubprivate/OEBPS/Images/Figure-P66_37291.jpg?sign=1739204715-iRDr2dXdCj1W2jgo2eLWaRacrG8J5mK9-0-1d0b79514303f88953615ab19a423942)
执行结果
![](https://epubservercos.yuewen.com/371221/17274856804199906/epubprivate/OEBPS/Images/Figure-P66_37294.jpg?sign=1739204715-mz4AyCV47eWdRAy9wNy65tYK0gq5BgHC-0-8b0b0544c2ea90bd6847e3c1ba7e1000)
4-2-6 一个无聊的操作
程序实例ch4_12_6.py第2行,利用空格乘以40产生40个空格,功能是用于排版。如果将某个字符串乘以500,然后用print( )输出,可以在屏幕上建立一个无聊的画面。
实例:在屏幕上建立一个无聊的画面。
![](https://epubservercos.yuewen.com/371221/17274856804199906/epubprivate/OEBPS/Images/Figure-P67_37743.jpg?sign=1739204715-hV2QDWXqDILQ7OVZP0o9YHFa3Bfwv975-0-89882e5c74eb9d314dd1daa61e502a82)
上述实例是启发读者活用Python,可以产生许多意外的结果。
4-3 输出数据到文件
在4-2-1节有讲解在print( )函数中,默认输出位置是屏幕(sys.stdout),其实可以利用这个特性将输出导向一个文件。
4-3-1 打开一个文件open( )
open( )函数可以打开一个文件供读取或写入,如果这个函数执行成功,会返回文件流对象,这个函数的基本使用格式如下:
file_Obj = open(file, mode="r")# 只列出最常用的两个参数
file:用字符串列出要打开的文件,如果不指明路径,则打开目前工作文件夹。
mode:打开文件的模式,如果省略代表是mode="r",使用时如果mode="w"或其他,也可以省略“mode=”,直接写“w”。也可以同时具有多项模式,例如,“wb”代表以二进制文件打开供写入,可以是下列基本模式。下列是第一个字母的操作意义。
"r":这是默认值,打开文件供读取(read)。
"w":打开文件供写入,如果原先文件有内容将被覆盖。
"a":打开文件供写入,如果原先文件有内容,新写入数据将附加在后面。
"x":打开一个新的文件供写入,如果所打开的文件已经存在会产生错误。下列是第二个字母的意义,代表文件类型。
"b":打开二进制文件模式。
"t":打开文本文件模式,这是默认值。
file_Obj:这是文件对象,读者可以自行命名,未来print( )函数可以将输出导向此对象,不使用时要关闭file_Obj.close( ),才可以返回操作系统的文件管理器观察执行结果。
4-3-2 使用print( )函数输出数据到文件
程序实例ch4_13.py:将数据输出到文件的实例,其中,输出到out1.txt采用“w”模式,输出到out2.txt采用“a”模式。
![](https://epubservercos.yuewen.com/371221/17274856804199906/epubprivate/OEBPS/Images/Figure-P68_38211.jpg?sign=1739204715-tFdJpQ7bYgvkTZbnu803EZxVcTpuG7kA-0-03b492019f58d00e19a333f5619ebb34)
执行结果
这个程序执行后需到ch4文件夹查看执行结果内容,如果执行程序一次,可以得到out1.txt和out2.txt内容相同。但是如果持续执行,out2.txt内容会持续增加,out1.txt内容则保持不变,下列是检查文件夹内容。
![](https://epubservercos.yuewen.com/371221/17274856804199906/epubprivate/OEBPS/Images/Figure-P68_38214.jpg?sign=1739204715-4JiBVxkUjtiVciOzfuSzJ7yPMM6ph1p1-0-9e42f34a62f28f8ab0ddfd6386b39be2)
下列是执行两次此程序后out1.txt和out2.txt的内容。
![](https://epubservercos.yuewen.com/371221/17274856804199906/epubprivate/OEBPS/Images/Figure-P68_38217.jpg?sign=1739204715-5htwcnMIfGRXsBqZXlkCUfZ3rvvVtcMh-0-17ed72ddaceb9aae897f97a73feab591)
4-4 数据输入input( )
这个input( )函数功能与print( )函数功能相反,会从屏幕读取用户从键盘输入的数据,它的使用格式如下:
value = input("prompt: ")
value是变量,所输入的数据会存储在此变量内,特别需注意的是所输入的数据不论是字符串或是数值数据返回到value时一律是字符串数据,如果要执行数学运算需要用int( )函数转换为整数。
程序实例ch4_14.py:认识输入数据类型。
![](https://epubservercos.yuewen.com/371221/17274856804199906/epubprivate/OEBPS/Images/Figure-P68_38221.jpg?sign=1739204715-DOwypsdWFyzVJjarvs5Po6qRQ9eXA7xi-0-a2b659db43149e36e6552811a5150dd7)
执行结果
![](https://epubservercos.yuewen.com/371221/17274856804199906/epubprivate/OEBPS/Images/Figure-P69_38676.jpg?sign=1739204715-iueMGWQb6VYQU9HqkWaTg5ACufk4mZbg-0-a7e3c93bd4b8c73a30983b5ff16963d3)
程序实例ch4_15.py:基本数据输入与运算。
![](https://epubservercos.yuewen.com/371221/17274856804199906/epubprivate/OEBPS/Images/Figure-P69_38679.jpg?sign=1739204715-RgjEbmGE7D0RElSDVsXJ6lmmj1dG0L8Z-0-b528e3aefda89c0597d5ccec43566bec)
执行结果
![](https://epubservercos.yuewen.com/371221/17274856804199906/epubprivate/OEBPS/Images/Figure-P69_38682.jpg?sign=1739204715-AUZFdwlcveFa27KaTRB9cR80vvwSztJa-0-a2c3de1802825b7d56c548d84b9246ef)
接下来的程序主要是处理中文名字与英文名字的技巧,假设要求使用者分别输入姓氏(lastname)与名字(firstname),在中文中要处理成名字,可以使用下列字符串连接方式。
fullname = lastname + firstname
在英文中首先名字在前面,姓氏在后面,同时中间有一个空格,因此处理方式如下:
fullname = firstname + " " + lastname
程序实例ch4_16.py:分别输入中文和英文的姓氏以及名字,本程序将会输出名字组合并输出问候语。
![](https://epubservercos.yuewen.com/371221/17274856804199906/epubprivate/OEBPS/Images/Figure-P69_38685.jpg?sign=1739204715-DvL0DKomAwBzkVBNQNsjpgCBf3wuT1Tk-0-7596b07a8d09fc7fed04ec99a8dfba9c)
执行结果
![](https://epubservercos.yuewen.com/371221/17274856804199906/epubprivate/OEBPS/Images/Figure-P69_38688.jpg?sign=1739204715-RJen7fBAKYWiMpIcjKmbuPZq8083KCvx-0-b00ea69f01b7ee3f8807e7dfaba71565)
4-5 处理字符串的数学运算eval( )
Python内有一个非常好用的计算数学表达式的函数eval( ),这个函数可以直接返回字符串内数学表达式的计算结果。
result = eval(expression) # expression是字符串
程序实例ch4_17.py:输入公式,本程序可以列出计算结果。
![](https://epubservercos.yuewen.com/371221/17274856804199906/epubprivate/OEBPS/Images/Figure-P70_39143.jpg?sign=1739204715-x804gTWVohibPUdpx66clewWQWho7Kwv-0-d39fe2912398fba231b43d939dc06793)
执行结果
![](https://epubservercos.yuewen.com/371221/17274856804199906/epubprivate/OEBPS/Images/Figure-P70_39146.jpg?sign=1739204715-WeiHp0wuK6PZTCuCaAdBZfA0rrCGX3Xu-0-8b570263aed62258706a5d695f952267)
由上述执行结果可以发现,在第一个执行结果中输入的是“5*9+10”字符串,eval( )函数可以处理此字符串的数学表达式,然后将计算结果返回,同时也可以发现即使此数学表达式之间有空字符也可以正常处理。
Windows操作系统有计算器程序,其实当我们使用计算器输入运算公式时,就可以将所输入的公式用字符串存储,然后使用eval( )方法就可以得到运算结果。在ch4_15.py中input( )所输入的数据是字符串,当时我们使用int( )将字符串转成整数处理,其实也可以使用eval( )配合input( ),直接返回整数数据。
程序实例ch4_18.py:使用eval( )重新设计ch4_15.py 。
![](https://epubservercos.yuewen.com/371221/17274856804199906/epubprivate/OEBPS/Images/Figure-P70_39149.jpg?sign=1739204715-DUNYr4MJsLa2k9m3VrVPWJqeLqLVg5EU-0-30b7097a345b5eb9c1a8d92fd65c438e)
执行结果
![](https://epubservercos.yuewen.com/371221/17274856804199906/epubprivate/OEBPS/Images/Figure-P70_39152.jpg?sign=1739204715-J6AZNNzZkAN0vJPFByWQPSAFPoXloiIV-0-e4bbddedcc383f70ad28385449eeb838)
一个input( )可以读取一个输入字符串,我们可以灵活运用多重指定在eval( )与input( )函数上,然后产生一行输入多个数值数据的效果。
程序实例ch4_19.py:输入3个数字,本程序可以输出平均值,注意输入时各数字间要用“,”隔开。
![](https://epubservercos.yuewen.com/371221/17274856804199906/epubprivate/OEBPS/Images/Figure-P71_39616.jpg?sign=1739204715-IwvSLDm5mfWchHRqQs0KKyRKKGRL2qMW-0-56d93a583848ae4c963fef5b54132da2)
执行结果
![](https://epubservercos.yuewen.com/371221/17274856804199906/epubprivate/OEBPS/Images/Figure-P71_39619.jpg?sign=1739204715-1o2evAFuZke0yvpNgLFZfZQUnxobUmoc-0-3d67678d388cfc15c84048d7419757b2)
4-6 列出所有内建函数dir( )
阅读至此,相信读者已经使用了许多Python内建的函数了,例如help( )、print( )、input( )等,读者可能想了解到底Python提供哪些内建函数可供我们在设计程序时使用,可以使用下列方式列出Python所提供的内建函数。
dir(_ _ builtins _ _) # 列出Python内建函数
实例:列出Python所有内建函数。
![](https://epubservercos.yuewen.com/371221/17274856804199906/epubprivate/OEBPS/Images/Figure-P71_39638.jpg?sign=1739204715-wJgveNvRMLHCUiigex79qAueeRqoA91O-0-958ffbe5b9c35181a7ec7f65f5037b2f)
在本书中,笔者会依功能分类将常用的内建函数分别融入各章节主题中,如果读者想了解某一个内建函数的功能,可参考4-1节使用help( )函数。
4-7 专题——温度转换/房贷问题/正五角形面积/利用经纬度计算距离
4-7-1 设计摄氏温度和华氏温度的转换
摄氏温度(Celsius,C)的由来是在标准大气压环境,纯水的凝固点是0℃,沸点是100℃,中间划分100等份,每个等份是摄氏1度。为了纪念瑞典科学家安德斯·摄尔修斯(Anders Celsius)对摄氏温度定义的贡献,所以称为摄氏温度(Celsius)。
华氏温度(Fahrenheit,F)的由来是在标准大气压环境,水的凝固点是32℃、水的沸点是212℃,中间划分180等份,每个等份是华氏1度。为了纪念德国科学家丹尼尔·加布里埃尔·华伦海特(Daniel Gabriel Fahrenheit)对华氏温度定义的贡献,所以称为华氏温度(Fahrenheit)。
摄氏和华氏温度互转的公式如下:
摄氏温度 = ( 华氏温度 – 32 )×5 / 9
华氏温度 = 摄氏温度×( 9 / 5 ) + 32
程序实例ch4_20.py:请输入华氏温度,这个程序会输出摄氏温度。
![](https://epubservercos.yuewen.com/371221/17274856804199906/epubprivate/OEBPS/Images/Figure-P72_40121.jpg?sign=1739204715-piLBWNt9jdwEstAfuRbo4IjYkZqAhfqb-0-83bc917bddf03d85d4f4984ca0d6b9e7)
执行结果
![](https://epubservercos.yuewen.com/371221/17274856804199906/epubprivate/OEBPS/Images/Figure-P72_40124.jpg?sign=1739204715-oxdmbU6yqREYiY2nOmIL8pEzNxyrgJ0N-0-f29abade1f5aae1f9d61fa82d4238d14)
4-7-2 房屋贷款问题
每个人在成长的过程中可能都会经历买房子,第一次住在属于自己的房子中是一个美好的经历,大多数人在这个过程中可能需要向银行贷款。这时会思考需要贷多少钱?贷款年限是多少?银行利率是多少?然后可以利用上述已知资料计算每个月还款金额是多少,同时我们会好奇整个贷款结束究竟还了多少贷款本金和利息。在做这个专题分析时,已知的条件是:
贷款金额:使用loan当变量
贷款年限:使用year当变量
年利率:使用rate当变量
然后需要利用上述条件计算下列结果。
每月还款金额:使用monthlyPay当变量
总共还款金额:使用totalPay当变量
处理这个贷款问题的数学公式如下:
![](https://epubservercos.yuewen.com/371221/17274856804199906/epubprivate/OEBPS/Images/Figure-P72_192452.jpg?sign=1739204715-DSKlc2Bp4x7U8SUjbmoWhSjXqd9ssYHr-0-de6720abca54e99e45a508bb46c6f34f)
在银行的贷款术语习惯使用年利率,所以碰上这类问题需要将所输入的利率先除以100,这是转成百分比,同时要除以12表示是月利率。可以用下列方式计算月利率,用monthrate当变量。
monthrate = rate / (12*100) # 第5行
为了不让求每月还款金额的数学式变得复杂,将分子(第8行)与分母(第9行)分开计算,第10行是计算每月还款金额,第11行是计算总共还款金额。
程序实例ch4_21.py:请输入贷款金额、贷款年限和年利率,程序会输出每月还款金额和总共还款金额。
![](https://epubservercos.yuewen.com/371221/17274856804199906/epubprivate/OEBPS/Images/Figure-P73_40577.jpg?sign=1739204715-I39WlvwDvhYlZCJBiogCm43SgEWb6BjE-0-583bdd75573874aaa361278935b67b4c)
执行结果
![](https://epubservercos.yuewen.com/371221/17274856804199906/epubprivate/OEBPS/Images/Figure-P73_40580.jpg?sign=1739204715-lQwFeZy9TsCcPKFI6FVhnFjtzYoVCY2S-0-400a501e0a69acd7eeb5c7ec986bb713)
4-7-3 正五角形面积
在几何学中正五角形边长假设是s,其面积的计算公式如下:
![](https://epubservercos.yuewen.com/371221/17274856804199906/epubprivate/OEBPS/Images/Figure-P73_192457.jpg?sign=1739204715-en6KYj1fsGnRf4lqbdOE66kc3ZR0tNGe-0-92e867ebfdd87bef84147073a5a1472e)
上述计算正五角形面积需要使用数学中的PI,虽然可以使用3.14159代替,不过笔者此处先引导读者学习使用Python的数学模块,有关模块的概念将在第13章说明,此节将先教导读者使用,可以使用“import math”导入此数学模块。
程序实例ch4_22.py:请输入正五角形的边长s,此程序会计算此正五角形的面积。
![](https://epubservercos.yuewen.com/371221/17274856804199906/epubprivate/OEBPS/Images/Figure-P73_40595.jpg?sign=1739204715-WmtRKFxBsuQiqddma2NVA2OUyz4N8AnM-0-e7b0c89c420b56bb1cef0d8fea5778c8)
执行结果
![](https://epubservercos.yuewen.com/371221/17274856804199906/epubprivate/OEBPS/Images/Figure-P73_40598.jpg?sign=1739204715-sXxlt5p1IIqLfOCuRxsWsEKF3ROXQiBC-0-959850e4c3c88656ac7a500b56f03ab5)
可以将上述概念扩充应用在正多边形面积计算,相关概念可以参考习题13。
4-7-4 利用经纬度计算地球各城市间的距离
地球是圆的,我们可以使用经度和纬度来了解地球上每一个点的位置。有了两个地点的经纬度后,可以使用下列公式计算彼此的距离。
distance = r×acos(sin(x1)×sin(x2)+cos(x1)×cos(x2)×cos(y1-y2))
上述r是地球的半径约6371千米,由于Python的三角函数都是弧度(radians)单位,我们使用上述公式时,需使用math.radian( )函数将角度转成弧度。上述公式西经和北纬是正值,东经和南纬是负值。
经度坐标介于-180°~180°,纬度坐标是-90°~和90°,虽然我们习惯称经纬度,在用小括号表达时却是(纬度, 经度),也就是第一个参数放纬度,第二个参数放经度。
最简单的获得经纬度的方式是打开Google地图,其实打开Google地图后就可以在网址列看到我们目前所在地点的经纬度,选择地点就可以在网址列看到所选地点的经纬度信息,可参考下方左图。
![](https://epubservercos.yuewen.com/371221/17274856804199906/epubprivate/OEBPS/Images/Figure-P74_41047.jpg?sign=1739204715-a87h3gccabD86Zkzw1aUJrVrL6FhseCk-0-9793167c1e14dd192efa481cc45378e3)
由上图可以知道中国台北车站的经纬度是(25.0452909, 121.5168704),以上概念可以应用于查询世界各地的经纬度,上方右图是中国香港红磡车站的经纬度(22.2838912, 114.173166),程序为了简化小数取4位。
程序实例ch4_23.py:中国香港红磡车站的经纬度信息是(22.2839, 114.1731),中国台北车站的经纬度是(25.0452, 121.5168),请计算中国台北车站至中国香港红磡车站的距离。
![](https://epubservercos.yuewen.com/371221/17274856804199906/epubprivate/OEBPS/Images/Figure-P74_41051.jpg?sign=1739204715-TSh6cHUeDnGKn84dkWauXCpykshMGKW2-0-636d7924805e52c4e872b685a79b6824)
执行结果
![](https://epubservercos.yuewen.com/371221/17274856804199906/epubprivate/OEBPS/Images/Figure-P74_41054.jpg?sign=1739204715-YLrB4mkwVbBxeMwg35DmKBDh3U9O6153-0-fa44490c6cd9b85fa84ac5e797114418)
习题
1. 请重新设计第2章的习题4,将输出方式改为下列方式。(4-2节)
![](https://epubservercos.yuewen.com/371221/17274856804199906/epubprivate/OEBPS/Images/Figure-P75_41489.jpg?sign=1739204715-VpxjVWqNIsd83FirenMtDD1R2XpWxid7-0-4a96d8f44e6f34cafb40ac4808df3747)
2. 扩充ch4_10.py,最右边增加平均分数字段,这个字段的格式化方式是%4.1f,相当于取到小数第1位。(4-2节)
![](https://epubservercos.yuewen.com/371221/17274856804199906/epubprivate/OEBPS/Images/Figure-P75_41492.jpg?sign=1739204715-je6PuBUZWsi4L3Zzs20IqOqGu2z28HS9-0-f84dd28006a9becd85c0fe714530d556)
3. 设计前一个程序,输出到out.txt,最后用记事本显示执行结果,下列是执行画面。(4-3节)
![](https://epubservercos.yuewen.com/371221/17274856804199906/epubprivate/OEBPS/Images/Figure-P75_41495.jpg?sign=1739204715-rCsdTD1tpR7QXKcZrDlezY6lj2BqYkCG-0-9b7a6c7c0100a116a01afb5115f482a9)
下列是验证out.txt结果。
![](https://epubservercos.yuewen.com/371221/17274856804199906/epubprivate/OEBPS/Images/Figure-P75_41498.jpg?sign=1739204715-0x6PYMuYS8LPS7faKJbYHxM0KDob1aKs-0-3d22789774674186d6cadab594635506)
4. 写一个程序,要求用户输入3位数数字,最后舍去个位数字输出,例如,输入是777输出是770,输入是879输出是870。(4-4节)
![](https://epubservercos.yuewen.com/371221/17274856804199906/epubprivate/OEBPS/Images/Figure-P75_41501.jpg?sign=1739204715-K5QVIjE7GlM2KJSNYEMBxi331ltnj8M2-0-e9f0ce334cdd06df8717a1779d4216f7)
5. 请重新设计ch4_20.py,改为输入摄氏温度,转成华氏温度输出,输出温度格式化到小数第1位。(4-4节)
![](https://epubservercos.yuewen.com/371221/17274856804199906/epubprivate/OEBPS/Images/Figure-P75_41504.jpg?sign=1739204715-vktvzAOYgjsVhCMUilt2e3P0Gc8jklvz-0-583a1678b2ce745445c4569cb6106ca6)
6. 输入厘米,转成英寸输出,输出格式化到小数第1位。提示:1英寸约是2.54厘米。(4-4节)
![](https://epubservercos.yuewen.com/371221/17274856804199906/epubprivate/OEBPS/Images/Figure-P75_41507.jpg?sign=1739204715-5RQnVLkBYwIHdusfxdxOh2pG0KEAkFJU-0-28e42378d1832d3d837427a39a16d4b3)
7. 输入英寸,转成厘米输出,输出格式化到小数第1位。提示:1英寸约是2.54厘米。(4-4节)
![](https://epubservercos.yuewen.com/371221/17274856804199906/epubprivate/OEBPS/Images/Figure-P76_41933.jpg?sign=1739204715-dOh3NWll9isdqUCIMu1HkzWvcnMbtDTY-0-395bbc0108a9be34455bf1697590f7eb)
8. 请重新设计ch2_5.py,将年利率和存款年数改为从屏幕输入,输出金额舍去小数相当于单位是元。(4-4节)
![](https://epubservercos.yuewen.com/371221/17274856804199906/epubprivate/OEBPS/Images/Figure-P76_41936.jpg?sign=1739204715-3YMC0TM2w0tpWbxBxdzNwftiezxNbPOS-0-ec80fc78988a6dc530cc3920ae7bb0f3)
9. 请重新设计第2章的习题5,将火箭飞行速度改为从屏幕输入,输出舍去小数。(4-4节)
![](https://epubservercos.yuewen.com/371221/17274856804199906/epubprivate/OEBPS/Images/Figure-P76_41939.jpg?sign=1739204715-Wt6K676hKg2vCTAQhgj0bGtenGpZQdPU-0-243e75d9ff1b715a4c20e0e302676849)
10. 请重新设计ch3_24.py,将速度speed改为从屏幕输入马赫数,程序会将速度马赫数转为千米/小时,然后才开始运算。(4-4节)
![](https://epubservercos.yuewen.com/371221/17274856804199906/epubprivate/OEBPS/Images/Figure-P76_41942.jpg?sign=1739204715-5DbnRU3kWugFPtVqHU14Ij4pcoEAY2hx-0-2dd4b9c46e2f17ff706118370adee6ee)
11. 请重新设计程序实例ch3_26.py,计算两个点之间的距离,但是将点的坐标改为从屏幕输入,一行需可以输入x和y坐标,输出到小数第2位。(4-5节)
![](https://epubservercos.yuewen.com/371221/17274856804199906/epubprivate/OEBPS/Images/Figure-P76_41945.jpg?sign=1739204715-CKIhA9PeZGBjoCADmmx2sxzkO9Kqrwvo-0-c6a7fd953d01bf71218ecde0f34e5903)
12. 前一个习题的扩充,平面任意3个点可以产生三角形,请输入任意3个点的坐标,可以使用下列公式计算此三角形的面积。假设三角形各边长是dist1、dist2、dist3。(4-5节)
![](https://epubservercos.yuewen.com/371221/17274856804199906/epubprivate/OEBPS/Images/Figure-P76_192464.jpg?sign=1739204715-y7AxM6LqldrdwrKLe0fF3JLvchv144eV-0-888bed426da4156a61eeae9e103bcb81)
![](https://epubservercos.yuewen.com/371221/17274856804199906/epubprivate/OEBPS/Images/Figure-P76_41952.jpg?sign=1739204715-kuoLIzEqy1JYfNseVSVHjNuvJ3qkVwSy-0-e419bb08c91e0bb196574f930affd9ce)
13. 在4-7-3节介绍了正五角形的面积计算公式,可以将该公式扩充为正多边形面积计算,如下所示。(4-7节)
![](https://epubservercos.yuewen.com/371221/17274856804199906/epubprivate/OEBPS/Images/Figure-P76_192465.jpg?sign=1739204715-WWAREuxeQ9bvTFBmHXGRaUVQR7UuhB9r-0-95fb61dfccc28b640c69d2a98c38b20a)
![](https://epubservercos.yuewen.com/371221/17274856804199906/epubprivate/OEBPS/Images/Figure-P77_42388.jpg?sign=1739204715-DJ2DsZ8GPd6XWSTJNEVicHIGw3JLZ5bo-0-d1dcd77bbb448aa25a4821ddfa897e24)
14. 请扩充ch4_23.py,将程序改为输入两个地点的经纬度,本程序可以计算这两个地点的距离。(4-7节)
![](https://epubservercos.yuewen.com/371221/17274856804199906/epubprivate/OEBPS/Images/Figure-P77_42391.jpg?sign=1739204715-3qKvbV3962mbUm8x4P80pYbcQ139oUJN-0-d42a0caa9c04953221414a993abdd5cc)
15. 假设一架飞机起飞的速度是v,飞机的加速度是a,下列是飞机起飞时所需的跑道长度公式。(4-7节)
![](https://epubservercos.yuewen.com/371221/17274856804199906/epubprivate/OEBPS/Images/Figure-P77_192466.jpg?sign=1739204715-QkIWomndXVnIBlZMbfGvbY5S4BqLShAe-0-9c38d59a48124029e32402f703472b71)
请输入飞机时速(米/秒)和加速速(米/秒),然后列出所需跑道长度(米)。
![](https://epubservercos.yuewen.com/371221/17274856804199906/epubprivate/OEBPS/Images/Figure-P77_42401.jpg?sign=1739204715-vuMOFswr6WqVqRKHjnQv2k8Lxq3aML0X-0-5a144cd9dfdd69e498bc42ab5b70daef)
16. 北京故宫博物院的经纬度信息大约是(39.9196, 116.3669),法国巴黎罗浮宫的经纬度大约是(48.8595, 2.3369),请计算这两个博物馆之间的距离。(4-7节)
![](https://epubservercos.yuewen.com/371221/17274856804199906/epubprivate/OEBPS/Images/Figure-P77_42404.jpg?sign=1739204715-Pa8818UCmblQoiXiIFwLUfnFlgF5f70b-0-0a23c94c6f9257484f6104e7207546d8)