![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=1739302078-uAc8NE68OhVQF9K8QFoA6I4GwmjT7Nvi-0-f7fcf7c366eb11fba290c49b3839668d)
当然程序语言是全球化的语言,所有说明是以英文为基础,要有一定的英文能力才可彻底了解,不过笔者在本书中会详尽地用中文引导读者入门。
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=1739302078-Z7vJCnlU73hb4eslS8FBcVrNZbmf4uq9-0-684c954dcc04d5b3f8ed4cf46316d7cf)
执行结果
![](https://epubservercos.yuewen.com/371221/17274856804199906/epubprivate/OEBPS/Images/Figure-P60_34463.jpg?sign=1739302078-PNKSBSuY4aEQGFDhU1jPwfYc8ZxCERcD-0-1e3826aba78372032746bcf6172c4485)
程序实例ch4_2.py:重新设计ch4_1.py,将两个数据在同一行输出,彼此之间使用Tab键的距离隔开。
![](https://epubservercos.yuewen.com/371221/17274856804199906/epubprivate/OEBPS/Images/Figure-P60_34466.jpg?sign=1739302078-Nr5GAojEXoTP1BY1z3xTCDSVoadu5F2q-0-2bbad06e9e5a64cd86cebaf00ac1e493)
执行结果
![](https://epubservercos.yuewen.com/371221/17274856804199906/epubprivate/OEBPS/Images/Figure-P60_34469.jpg?sign=1739302078-4ulUjQxbhosuYih4sUQJKZUAlcwpwIkj-0-1741cf07656a4c62ee2573cf54d91241)
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=1739302078-5OVpn6uPExpRV0gwS5P0TIqXmA4omujE-0-dd832810287755ded6b34c172e3f720a)
执行结果
![](https://epubservercos.yuewen.com/371221/17274856804199906/epubprivate/OEBPS/Images/Figure-P61_34921.jpg?sign=1739302078-fDDGLzSXjay9CFz2C2zmTkesf5SUTOhV-0-fefb92358ec72b0df4808696b657ba4d)
设计程序时,在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=1739302078-WQiI1k4qRRhHTj2XooUb4rqgEfzt4RC6-0-48ca77d930b01d41ee0c1554a754ff49)
执行结果 与ch4_3.py相同。
程序实例ch4_5.py:格式化十六进制和八进制输出的应用。
![](https://epubservercos.yuewen.com/371221/17274856804199906/epubprivate/OEBPS/Images/Figure-P61_34928.jpg?sign=1739302078-ZJ2etNbRGIyH3540bVZH90RNY1vu1mMt-0-2dea9a16441610985add713fd545e926)
执行结果
![](https://epubservercos.yuewen.com/371221/17274856804199906/epubprivate/OEBPS/Images/Figure-P61_34931.jpg?sign=1739302078-zSqfcTmztScTvuCl12ipF7mGtvs7d2fF-0-d05fee889b9471ca95b3050cd629a386)
程序实例ch4_6.py:将整数与浮点数分别以%d、%f、%s格式化,同时观察执行结果。特别要注意的是,浮点数以整数%d格式化后,小数数据将被舍去。
![](https://epubservercos.yuewen.com/371221/17274856804199906/epubprivate/OEBPS/Images/Figure-P61_34934.jpg?sign=1739302078-BI6fTiELOSGejAClOuGX9lLHhmcjAWJ6-0-f8ab1701d535db404cc31f22df005c81)
执行结果
![](https://epubservercos.yuewen.com/371221/17274856804199906/epubprivate/OEBPS/Images/Figure-P61_34937.jpg?sign=1739302078-E7C3hsJmfODyWAzZbOYwGtnDFCQFngj4-0-b893d3d6f8fbc4ef620fb943b26c60ef)
下列是使用%x和%X格式化数据输出的实例。
![](https://epubservercos.yuewen.com/371221/17274856804199906/epubprivate/OEBPS/Images/Figure-P62_35401.jpg?sign=1739302078-aFRfArgp9Nz6NSOYKN4usyuY3mVDGTmU-0-605481b0cee17ef16633da4a27ecc613)
下列是使用%e和%E格式化科学记数法数据输出的实例。
![](https://epubservercos.yuewen.com/371221/17274856804199906/epubprivate/OEBPS/Images/Figure-P62_35404.jpg?sign=1739302078-7o3WXCLPnSVzylMkmW4VpbW0ASbGhuHS-0-84bd9704dbb6835bd7414798ce5731db)
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=1739302078-pXZc0PbCn09oP4XcnKflGvkcTT68ovio-0-4aca932cd5daa00bda493a8f7c2922b3)
执行结果
![](https://epubservercos.yuewen.com/371221/17274856804199906/epubprivate/OEBPS/Images/Figure-P63_35838.jpg?sign=1739302078-76NN6HYnQCovFE5qfDn9QZyYswtmsTXk-0-24a1160c1fdd4554934818db781a318e)
程序实例ch4_8.py:格式化输出,靠左对齐的实例。
![](https://epubservercos.yuewen.com/371221/17274856804199906/epubprivate/OEBPS/Images/Figure-P63_35841.jpg?sign=1739302078-UYkZmmTiwx5QNHUqOZEp1YBuU0DAlsPF-0-e4c3eafee6829d48d0b8af74aa18c9ea)
执行结果
![](https://epubservercos.yuewen.com/371221/17274856804199906/epubprivate/OEBPS/Images/Figure-P63_35844.jpg?sign=1739302078-cYyB6xF3I4HYTKiBjkRLNqSMN1Y4TWTD-0-0030e80ce7f64fdaa9f5f30bca7bfb47)
程序实例ch4_9.py:格式化输出,正值数据将出现正号(+)。
![](https://epubservercos.yuewen.com/371221/17274856804199906/epubprivate/OEBPS/Images/Figure-P63_35847.jpg?sign=1739302078-UM6uf4NZxGkpYAJUW533nBMRCqmUHLDJ-0-0f0410c61402dceaf5ee7ea945f7b6db)
执行结果
![](https://epubservercos.yuewen.com/371221/17274856804199906/epubprivate/OEBPS/Images/Figure-P63_35850.jpg?sign=1739302078-tNuURCNgGBK3N0EUCpwsTmHCqfFa7gZf-0-bf6c1563bd0f2a014c5981d5b501fcf3)
程序实例ch4_10.py:格式化输出的应用。
![](https://epubservercos.yuewen.com/371221/17274856804199906/epubprivate/OEBPS/Images/Figure-P63_35853.jpg?sign=1739302078-8hGnguTT6qQimdHZk3JmqFe26bKFKD1Z-0-7bcc3c9bbc01ab77eca7ada250dfd8cf)
执行结果
![](https://epubservercos.yuewen.com/371221/17274856804199906/epubprivate/OEBPS/Images/Figure-P63_35856.jpg?sign=1739302078-HcLAYdYVxtFzTppB7koEguSYt9sPmGWT-0-bdb9cd023ec224efa0fdca27668fcad5)
下面是格式化科学记数法e和E输出的应用。
![](https://epubservercos.yuewen.com/371221/17274856804199906/epubprivate/OEBPS/Images/Figure-P64_36318.jpg?sign=1739302078-IomgnWOi9dlWIJo3VEcZLoiPHwIMXCkO-0-68b93007ac3906b129cb030c3e6442f8)
对于格式化字符串有一个特别的是使用“%m.n”方式格式化字符串,这时m是保留显示字符串空间,n是显示字符串长度,如果n的长度小于实际字符串长度,会有裁减字符串的效果。
![](https://epubservercos.yuewen.com/371221/17274856804199906/epubprivate/OEBPS/Images/Figure-P64_36321.jpg?sign=1739302078-0JiENG4GSFTCC8U9clJC75wVpt4Oz2HP-0-c3238dd52be6f833b7c7036f1c0b1a97)
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=1739302078-cQZ24meYf0rG5IsnSgguhR8n30UHgPmp-0-9ee9c00f107412ace7436654179dcefc)
执行结果 与ch4_3.py相同。
程序实例ch4_12.py:以字符串代表输出格式区,重新设计ch4_11.py。
![](https://epubservercos.yuewen.com/371221/17274856804199906/epubprivate/OEBPS/Images/Figure-P64_36329.jpg?sign=1739302078-TiD00lspvruwdst3sIyBuErKmtiMkxZ5-0-393b2f9429513aabc215f746a720e367)
执行结果 与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=1739302078-iHu8Xg7hhGR6FNMZgjTVVom0gaShk2e3-0-ed779b66bc72e7b473d9f25d45862397)
执行结果
![](https://epubservercos.yuewen.com/371221/17274856804199906/epubprivate/OEBPS/Images/Figure-P65_36790.jpg?sign=1739302078-rLwjJNm5wXYXn2KILVXWBKKrjvx7VmBF-0-4f0a49f75592175a1c6b94517103daac)
也可以在format( )内使用具名参数。
程序实例ch4_12_2.py:使用具名参数,重新设计ch4_12_1.py。
![](https://epubservercos.yuewen.com/371221/17274856804199906/epubprivate/OEBPS/Images/Figure-P65_36793.jpg?sign=1739302078-q2rgCNhggqUB5plszu0liNkYVv4Ea222-0-44fde14f70270d1023b8c53602f5908d)
执行结果
![](https://epubservercos.yuewen.com/371221/17274856804199906/epubprivate/OEBPS/Images/Figure-P65_36796.jpg?sign=1739302078-dQfckB1cYNmgvqbVkVwGU8w4ldB4ge6b-0-7ae1aae78599025c4aa0a3d036642e43)
也可以将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=1739302078-Bkqwv7vLxvjRFMj1ywfOcFf1y1XAObb4-0-07fe827b3a7e67e4a5f67c307b09c249)
执行结果
![](https://epubservercos.yuewen.com/371221/17274856804199906/epubprivate/OEBPS/Images/Figure-P65_36802.jpg?sign=1739302078-xxh73rkXWUW4KO0TmQRRxaPFdwK2Tfuw-0-ed2b3315a5016704bd6a17d4d11b5605)
在使用格式化输出时默认是靠右输出,也可以使用下列参数设置输出对齐方式。
>:靠右对齐
<:靠左对齐
^:居中对齐
程序实例ch4_12_4.py:输出对齐方式的应用。
![](https://epubservercos.yuewen.com/371221/17274856804199906/epubprivate/OEBPS/Images/Figure-P65_36805.jpg?sign=1739302078-TX0bSLh4NNWda7J72BpAwhRoLKBsdihv-0-9736cccce82b1fc7d5da392d14246ff4)
执行结果
![](https://epubservercos.yuewen.com/371221/17274856804199906/epubprivate/OEBPS/Images/Figure-P65_36808.jpg?sign=1739302078-vNpZUsMO8TnTlOzuif1ytV3ZFElgDWo1-0-a7334da5f08bd67624e635ceaefe666e)
在使用format输出时也可以使用填充字符,字符是放在“:”后面,在<、^、>或指定宽度之前。
程序实例ch4_12_5.py:填充字符的应用。
![](https://epubservercos.yuewen.com/371221/17274856804199906/epubprivate/OEBPS/Images/Figure-P66_37284.jpg?sign=1739302078-rmQVFFVrWkQpime3AOSUvLNs8eeoYBUc-0-e1187027e2377989127b043c975dea86)
执行结果
![](https://epubservercos.yuewen.com/371221/17274856804199906/epubprivate/OEBPS/Images/Figure-P66_37287.jpg?sign=1739302078-Y2riMMukVdleAMGu1bD5bsYBhzlX5YKI-0-9aec290d2d903342c4f4955385512971)
4-2-5 字符串输出与基本排版的应用
适度利用输出格式,可以制作一封排版的信件,以下程序的前3行会先利用sp字符串变量建立一个含40格的空白格数,然后产生对齐效果。
程序实例ch4_12_6.py:有趣排版信件的应用。
![](https://epubservercos.yuewen.com/371221/17274856804199906/epubprivate/OEBPS/Images/Figure-P66_37291.jpg?sign=1739302078-JxVTFahs1zandaOGAxFCDpEGfP4OOr3g-0-8ee8de42b56df4f0fb3086a2c7ae5d29)
执行结果
![](https://epubservercos.yuewen.com/371221/17274856804199906/epubprivate/OEBPS/Images/Figure-P66_37294.jpg?sign=1739302078-q7b84jxChLyzUWBNAD1OWbE1KXXsmTnW-0-11ef43215ca3d73656f59bc597b2b4fa)
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=1739302078-oxQWMal7Qg6rgexYulGUzJunhkEm2b6M-0-0234f6d4eadafb4fda46e2908853a254)
上述实例是启发读者活用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=1739302078-UGGAU9i01ziok6kgyO7oyFzemuORfUIS-0-b7ed52bd8a1a868ba6760928b7cacc9a)
执行结果
这个程序执行后需到ch4文件夹查看执行结果内容,如果执行程序一次,可以得到out1.txt和out2.txt内容相同。但是如果持续执行,out2.txt内容会持续增加,out1.txt内容则保持不变,下列是检查文件夹内容。
![](https://epubservercos.yuewen.com/371221/17274856804199906/epubprivate/OEBPS/Images/Figure-P68_38214.jpg?sign=1739302078-bHPF3l6n4RCDLKP7WbSfsybCkpQA4Fwz-0-2857c2b0b54af8112142256a728855b3)
下列是执行两次此程序后out1.txt和out2.txt的内容。
![](https://epubservercos.yuewen.com/371221/17274856804199906/epubprivate/OEBPS/Images/Figure-P68_38217.jpg?sign=1739302078-wxsXc61fNuopuxFzoNs8iPMRyRvPxo07-0-e32557cba14f6e893c49c31cae92fbcc)
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=1739302078-WTGc1mDvO5KD0Yss3ri80Yitu4pbbVax-0-aa754461a42974396c99b02fcf67a729)
执行结果
![](https://epubservercos.yuewen.com/371221/17274856804199906/epubprivate/OEBPS/Images/Figure-P69_38676.jpg?sign=1739302078-klITnknX5MVdIB7wx2D73G3PHLi2JKNQ-0-3c866b645bb8f8fe27c910be73e4f94f)
程序实例ch4_15.py:基本数据输入与运算。
![](https://epubservercos.yuewen.com/371221/17274856804199906/epubprivate/OEBPS/Images/Figure-P69_38679.jpg?sign=1739302078-YcNpG1tKBvD9Or8HJHBx24bgka4Slzj3-0-1ad9a2e142d8810deaa8d431123fc7cd)
执行结果
![](https://epubservercos.yuewen.com/371221/17274856804199906/epubprivate/OEBPS/Images/Figure-P69_38682.jpg?sign=1739302078-UFW1olQTlkjJAMxZ6BK51vk0dj0NOKx2-0-461d8e8a1d45adf36a04b1f0befdeaa3)
接下来的程序主要是处理中文名字与英文名字的技巧,假设要求使用者分别输入姓氏(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=1739302078-Oa4A7v0GuEWbWAPNI4HS7X2MBWgN8aiQ-0-06c0bf9fc3ca8e61e78aca0bffa4f0b0)
执行结果
![](https://epubservercos.yuewen.com/371221/17274856804199906/epubprivate/OEBPS/Images/Figure-P69_38688.jpg?sign=1739302078-AojtgXob4UgkI2bAlquf34nzGfOLDS3G-0-44bca2ecb380df53817d4bd46aad9477)
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=1739302078-d1ejcZk2daZgGGGKXY14QruHK6MVkxtP-0-65c436135bf24f27cce3584cb057bce6)
执行结果
![](https://epubservercos.yuewen.com/371221/17274856804199906/epubprivate/OEBPS/Images/Figure-P70_39146.jpg?sign=1739302078-2Uhy3v7ReK9LSP54KR1AKWwukms1Bton-0-7eddf3909622769f42b6004ba45acbb6)
由上述执行结果可以发现,在第一个执行结果中输入的是“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=1739302078-F4MakrvWcZv2cnwFDeQGb8UUpvbMmIIV-0-e441953d5ea6eba64afd95448499975f)
执行结果
![](https://epubservercos.yuewen.com/371221/17274856804199906/epubprivate/OEBPS/Images/Figure-P70_39152.jpg?sign=1739302078-Kq2znuF3bxKD1We5ujOGv7q01g7mut4J-0-b75d44c5f5b048ca1903333c6520143f)
一个input( )可以读取一个输入字符串,我们可以灵活运用多重指定在eval( )与input( )函数上,然后产生一行输入多个数值数据的效果。
程序实例ch4_19.py:输入3个数字,本程序可以输出平均值,注意输入时各数字间要用“,”隔开。
![](https://epubservercos.yuewen.com/371221/17274856804199906/epubprivate/OEBPS/Images/Figure-P71_39616.jpg?sign=1739302078-PYH9mihmLs7c1oVp7gVlnuA8evVZVVHb-0-d6fd89f5152be0f639800f94768fc44c)
执行结果
![](https://epubservercos.yuewen.com/371221/17274856804199906/epubprivate/OEBPS/Images/Figure-P71_39619.jpg?sign=1739302078-Ou3MNtTg2YNkIcET0qLn51iWSm7Z4Myo-0-cb13f241513b6860042aca5c2da7f272)
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=1739302078-0lYw7p6oKqjXDomxhywdEpmhFEJE24CN-0-483a75c6fd6491fc0319294e45c2c5bd)
在本书中,笔者会依功能分类将常用的内建函数分别融入各章节主题中,如果读者想了解某一个内建函数的功能,可参考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=1739302078-VBtRhZC4EF8tN43tCfIdSUB04JCOaxyZ-0-d9701d0bbcb853b465a82214aa9b43c4)
执行结果
![](https://epubservercos.yuewen.com/371221/17274856804199906/epubprivate/OEBPS/Images/Figure-P72_40124.jpg?sign=1739302078-5XSHz4bbRAFNlwMFF8oV17It8DDocud2-0-24c3da70c0035ee41dc51f4b256eb250)
4-7-2 房屋贷款问题
每个人在成长的过程中可能都会经历买房子,第一次住在属于自己的房子中是一个美好的经历,大多数人在这个过程中可能需要向银行贷款。这时会思考需要贷多少钱?贷款年限是多少?银行利率是多少?然后可以利用上述已知资料计算每个月还款金额是多少,同时我们会好奇整个贷款结束究竟还了多少贷款本金和利息。在做这个专题分析时,已知的条件是:
贷款金额:使用loan当变量
贷款年限:使用year当变量
年利率:使用rate当变量
然后需要利用上述条件计算下列结果。
每月还款金额:使用monthlyPay当变量
总共还款金额:使用totalPay当变量
处理这个贷款问题的数学公式如下:
![](https://epubservercos.yuewen.com/371221/17274856804199906/epubprivate/OEBPS/Images/Figure-P72_192452.jpg?sign=1739302078-4Tzh9tf0IcPFFBw76TcGFwPV49ZDc5U7-0-59c3ee1fca6ce918ba1bc2f4a6e41806)
在银行的贷款术语习惯使用年利率,所以碰上这类问题需要将所输入的利率先除以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=1739302078-hIj1ftaJtFpIvWGGyElvnV9jOJp6zCiD-0-b72d4e3d0ab965e352a167e16a65999c)
执行结果
![](https://epubservercos.yuewen.com/371221/17274856804199906/epubprivate/OEBPS/Images/Figure-P73_40580.jpg?sign=1739302078-Npa4epTjEbEkeHfhJ9K19jW2DhKs8F0k-0-e7d60a1e9ed5953e00ae79b446e60d25)
4-7-3 正五角形面积
在几何学中正五角形边长假设是s,其面积的计算公式如下:
![](https://epubservercos.yuewen.com/371221/17274856804199906/epubprivate/OEBPS/Images/Figure-P73_192457.jpg?sign=1739302078-HsKwJyOT7uk3RIZlZCzdHN3nXBTV5lcY-0-ccc2f765af4a9c1918081d3f45be31b8)
上述计算正五角形面积需要使用数学中的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=1739302078-3D0r7PFegxcGeBaoDWtIxdxwP8GAxQHQ-0-5b642fc694ecf3382d060996beda8723)
执行结果
![](https://epubservercos.yuewen.com/371221/17274856804199906/epubprivate/OEBPS/Images/Figure-P73_40598.jpg?sign=1739302078-CnCmEXPUctTUFHH2YFwQ6s5SW1oBkQDC-0-46688542e7622c97f35b1eec93655c57)
可以将上述概念扩充应用在正多边形面积计算,相关概念可以参考习题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=1739302078-uFKQIWSzjeMmEscbkUoxToMxrGFLW9Lz-0-2d0cc4942fe252ab244aad2dd812f7a8)
由上图可以知道中国台北车站的经纬度是(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=1739302078-w1MInIEhu6buTW1ccmwgzygLgT1ryMUv-0-618f5b1ef5661dd19d8757998c20d9fd)
执行结果
![](https://epubservercos.yuewen.com/371221/17274856804199906/epubprivate/OEBPS/Images/Figure-P74_41054.jpg?sign=1739302078-kCIcW6nL88kDMr08bQVADdDbpPurWbpw-0-617006bcaddfc88cffe08308c7d85dda)
习题
1. 请重新设计第2章的习题4,将输出方式改为下列方式。(4-2节)
![](https://epubservercos.yuewen.com/371221/17274856804199906/epubprivate/OEBPS/Images/Figure-P75_41489.jpg?sign=1739302078-NfRpNDPWMISp0kHKSb9qbcHKGiikcbby-0-21113f4d79b5467132f179488c10e863)
2. 扩充ch4_10.py,最右边增加平均分数字段,这个字段的格式化方式是%4.1f,相当于取到小数第1位。(4-2节)
![](https://epubservercos.yuewen.com/371221/17274856804199906/epubprivate/OEBPS/Images/Figure-P75_41492.jpg?sign=1739302078-vcPADVyxF2cK5WHAu8i8pouKF1S8y9kb-0-a048ee4406beb63fd5ba2f855a0b2263)
3. 设计前一个程序,输出到out.txt,最后用记事本显示执行结果,下列是执行画面。(4-3节)
![](https://epubservercos.yuewen.com/371221/17274856804199906/epubprivate/OEBPS/Images/Figure-P75_41495.jpg?sign=1739302078-T32bAZsgwTt7r2v3afzICcIxXPlMNOhi-0-25aa6645cfda0db76c753e805c33c178)
下列是验证out.txt结果。
![](https://epubservercos.yuewen.com/371221/17274856804199906/epubprivate/OEBPS/Images/Figure-P75_41498.jpg?sign=1739302078-zg4zQhYTXLCWdVdqzAN0x13w1AuEwGDv-0-f666b4bc89cf8f4282095243e9cfc6f0)
4. 写一个程序,要求用户输入3位数数字,最后舍去个位数字输出,例如,输入是777输出是770,输入是879输出是870。(4-4节)
![](https://epubservercos.yuewen.com/371221/17274856804199906/epubprivate/OEBPS/Images/Figure-P75_41501.jpg?sign=1739302078-QUvzvGDxZFuAkVRO9VpW3JIpvoUYilmm-0-fb5d69374098e11446eca5c87cbd4c74)
5. 请重新设计ch4_20.py,改为输入摄氏温度,转成华氏温度输出,输出温度格式化到小数第1位。(4-4节)
![](https://epubservercos.yuewen.com/371221/17274856804199906/epubprivate/OEBPS/Images/Figure-P75_41504.jpg?sign=1739302078-VhjDq9suY9g8e0CHsKFkGAK2vsZH2nh2-0-fa3566538795230d15ed5d9c36843b00)
6. 输入厘米,转成英寸输出,输出格式化到小数第1位。提示:1英寸约是2.54厘米。(4-4节)
![](https://epubservercos.yuewen.com/371221/17274856804199906/epubprivate/OEBPS/Images/Figure-P75_41507.jpg?sign=1739302078-qliAxkZOyuFlNujw3jTLkzODjPOF5JIB-0-417ebad3d4ff95d4a8358a50f9014d63)
7. 输入英寸,转成厘米输出,输出格式化到小数第1位。提示:1英寸约是2.54厘米。(4-4节)
![](https://epubservercos.yuewen.com/371221/17274856804199906/epubprivate/OEBPS/Images/Figure-P76_41933.jpg?sign=1739302078-qlCVJ6b45YmPs4YZ2O2UUd1Wk0Szj1j5-0-ada39dcea569afc0464d946e480881e6)
8. 请重新设计ch2_5.py,将年利率和存款年数改为从屏幕输入,输出金额舍去小数相当于单位是元。(4-4节)
![](https://epubservercos.yuewen.com/371221/17274856804199906/epubprivate/OEBPS/Images/Figure-P76_41936.jpg?sign=1739302078-PHIOrWOs285Auy4UZoSk7OmMWFeXzKS0-0-6081b287c04e7498ff5a67d90c313762)
9. 请重新设计第2章的习题5,将火箭飞行速度改为从屏幕输入,输出舍去小数。(4-4节)
![](https://epubservercos.yuewen.com/371221/17274856804199906/epubprivate/OEBPS/Images/Figure-P76_41939.jpg?sign=1739302078-J0TDcrCu3uZad3FCXjbP5Qy0ndEZNgPA-0-adb277d1fcffda047a131a2a42f669fe)
10. 请重新设计ch3_24.py,将速度speed改为从屏幕输入马赫数,程序会将速度马赫数转为千米/小时,然后才开始运算。(4-4节)
![](https://epubservercos.yuewen.com/371221/17274856804199906/epubprivate/OEBPS/Images/Figure-P76_41942.jpg?sign=1739302078-rvqU7QwvFwHIL2ZCAieldfgnxJiGzJVf-0-6a4a1ef29b280fb8852c6752d5163a9a)
11. 请重新设计程序实例ch3_26.py,计算两个点之间的距离,但是将点的坐标改为从屏幕输入,一行需可以输入x和y坐标,输出到小数第2位。(4-5节)
![](https://epubservercos.yuewen.com/371221/17274856804199906/epubprivate/OEBPS/Images/Figure-P76_41945.jpg?sign=1739302078-507tKvfFezK63hR1vBav4LekfmetErud-0-ea6255ea23bc3fd63671e69aa64cad19)
12. 前一个习题的扩充,平面任意3个点可以产生三角形,请输入任意3个点的坐标,可以使用下列公式计算此三角形的面积。假设三角形各边长是dist1、dist2、dist3。(4-5节)
![](https://epubservercos.yuewen.com/371221/17274856804199906/epubprivate/OEBPS/Images/Figure-P76_192464.jpg?sign=1739302078-5aanm1tYoUlwBlGU2AZF9wV5dTvi8Kcz-0-2083f8fa0fba34b46bf05635a2f2247b)
![](https://epubservercos.yuewen.com/371221/17274856804199906/epubprivate/OEBPS/Images/Figure-P76_41952.jpg?sign=1739302078-8am7D4dniBBLxdCY0I6BFf7GwR12XEn4-0-21f3204514f6803b06ceb511d114ba54)
13. 在4-7-3节介绍了正五角形的面积计算公式,可以将该公式扩充为正多边形面积计算,如下所示。(4-7节)
![](https://epubservercos.yuewen.com/371221/17274856804199906/epubprivate/OEBPS/Images/Figure-P76_192465.jpg?sign=1739302078-Mk0NUcovZfI2Huc6ZdYXHTh9mwwcqCnZ-0-e6c90a72129a730ba1f185f541a733c5)
![](https://epubservercos.yuewen.com/371221/17274856804199906/epubprivate/OEBPS/Images/Figure-P77_42388.jpg?sign=1739302078-TdzJrGmjSo7JB7vdWqr9UdYFJNPRPlqE-0-3c4f1716290ed937c9f0fd22f8db1228)
14. 请扩充ch4_23.py,将程序改为输入两个地点的经纬度,本程序可以计算这两个地点的距离。(4-7节)
![](https://epubservercos.yuewen.com/371221/17274856804199906/epubprivate/OEBPS/Images/Figure-P77_42391.jpg?sign=1739302078-O5wJI67guVnXHs8awlSsTrekeGhlJNB8-0-d765a444b2cb33d29b8c83d4858c1bd3)
15. 假设一架飞机起飞的速度是v,飞机的加速度是a,下列是飞机起飞时所需的跑道长度公式。(4-7节)
![](https://epubservercos.yuewen.com/371221/17274856804199906/epubprivate/OEBPS/Images/Figure-P77_192466.jpg?sign=1739302078-0iWUVOwMgRrwaWnGsR1Wlj2XcvgIu9tZ-0-812a34fc2655bf66c6a9c923ffc7ac07)
请输入飞机时速(米/秒)和加速速(米/秒),然后列出所需跑道长度(米)。
![](https://epubservercos.yuewen.com/371221/17274856804199906/epubprivate/OEBPS/Images/Figure-P77_42401.jpg?sign=1739302078-2zdlY16LlUzcfpMh3wuboOTqRogjLpsC-0-78b99e05d61b1c72297a8118545b261a)
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=1739302078-mtM5AZm3mrvtABodgYnaP4EKjFmD27i6-0-c2e04a03910f5a7bd1e4eafdc3c7ddc9)