书名:Python完全自学教程
ISBN:978-7-115-59586-7
本书由人民邮电出版社发行数字版。版权所有,侵权必究。
您购买的人民邮电出版社电子书仅供您个人使用,未经授权,不得以任何方式复制和传播本书内容。
我们愿意相信读者具有这样的良知和觉悟,与我们共同保护知识产权。
如果购买者有侵权行为,我们可能对该用户实施包括但不限于关闭该帐号等维权措施,并可能追究法律责任。
著 明日科技
责任编辑 张天怡
人民邮电出版社出版发行 北京市丰台区成寿寺路11号
邮编 100164 电子邮件 315@ptpress.com.cn
网址 http://www.ptpress.com.cn
读者服务热线:(010)81055410
反盗版热线:(010)81055315
本书可作为Python自学手册。本书系统、全面地介绍了Python程序设计开发所涉及的各类知识。全书共19章,包括Python起步、Python语言基础、Python数据类型、运算符、条件控制语句、循环结构语句、序列、字符串、列表、字典与集合、文件与I/O、函数、GUI编程、异常处理及程序调试、Web编程、Web框架,以及3个实战案例即51商城、BBS问答社区、甜橙音乐网。全书每章内容都与实例紧密结合,有助于读者理解知识、应用知识,达到学以致用的目的。
本书附有配套资源包,资源包中有本书所有实例的源码及教学视频。其中,源码全部经过精心测试,能够在Windows 7、Windows 8、Windows 10操作系统下编译和运行。
本书可作为计算机、软件等相关专业的教材,同时也适合数据库爱好者、初级数据库开发人员阅读参考。
Python自问世以来,发展得越来越快,和Python相关的应用也越来越多。当前,实例教学是计算机程序语言教学最有效的方法之一。本书将Python知识和实用的实例有机结合起来:一方面,追踪Python的发展方向,适应市场需求,精心选择内容,突出重点,强调实用性,使知识讲解全面、系统;另一方面,将知识融入实例讲解,使知识与实例相辅相成,既有利于读者学习知识,又有利于指导读者实践。
如果您在学习或使用本书的过程中遇到问题或疑惑,可以通过如下方式与我们联系,我们会尽快提供解答。
服务网站:www.mingrisoft.com。
服务电话:0431-84978981/84978982。
企业QQ:4006751066。
服务信箱:mingrisoft@mingrisoft.com。
书中案例使用的数据信息均属虚构,如有雷同,纯属巧合。
由于编者水平有限,书中难免存在疏漏和不足之处,敬请广大读者批评指正,以便本书得以改进和完善。
明日科技
2023年6月
Python 是一种跨平台的、开源的、免费的、解释型的高级编程语言,它具有种类丰富和功能强大的库,能够把用其他语言(尤其是C/C++)制作的各种模块很轻松地“联结”在一起,所以Python常被称为“胶水”语言,其标志如图1.1所示。Python 的应用领域也非常广泛,在 Web 编程、图形处理、大数据处理、网络爬虫和科学计算等领域都能找到 Python 的身影。在全球最大的编程问答社区 Stack Overflow上,Python已经成为受欢迎的编程语言之一,如图1.2所示。
图1.1 Python的标志
图1.2 Python应用趋势
Python作为一种功能强大且简单易学的编程语言,广受好评,那么Python的应用领域有哪些呢?概括来说主要有以下几个领域。
Web开发。
大数据处理。
人工智能。
自动化运维开发。
云计算。
爬虫。
游戏开发。
编程软件为了提高开发效率,分别对32位操作系统和64位操作系统做了优化,推出了不同的开发工具包。Python也不例外,所以在安装Python前,需要了解计算机操作系统的位数。下面介绍在Windows 10下如何查看操作系统的位数。
在桌面找到“此电脑”图标,用鼠标右键单击该图标,在弹出的快捷菜单中选择“属性”命令,如图1.3所示。选择“属性”命令后将弹出图1.4所示的“系统”窗口,在“系统类型”处标示着本机是64位操作系统还是32位操作系统。图1.4中所展示的计算机操作系统为64位。
图1.3 选择“属性”命令
图1.4 查看系统类型
在Python的官方网站中,可以很方便地下载Python的开发环境,具体下载步骤可以查看本书相关视频。下载完成后,在下载位置可以看到已经下载的Python安装文件“python-3.8.2.exe”,如图1.5所示。
图1.5 下载后的python-3.8.2.exe文件
在Windows 64位操作系统上安装Python 3.x的步骤可以查看安装视频。
按照步骤安装Python后,需要检测Python是否安装成功。例如,在Windows 10操作系统中检测Python是否成功安装,可以在Windows 10操作系统的“开始”菜单上单击鼠标右键,在弹出的快捷菜单中选择“搜索”,接下来在桌面左下角“搜索程序和文件”文本框中输入cmd命令,然后按<Enter>键,启动“命令提示符”窗口(又称命令行界面、命令行窗口),在当前的“命令提示符”窗口中输入python,并且按<Enter>键,如果出现图1.6所示的信息,则说明Python安装成功,同时进入交互式Python解释器。
图1.6 在“命令提示符”窗口中运行的Python解释器
在“命令提示符”窗口中输入python命令后,可能会显示“‘python’不是内部或外部命令,也不是可运行的程序或批处理文件。”,如图1.7 所示。
图 1.7 输入python命令后出错
出现该问题的原因是,在当前的路径中找不到Python.exe可执行程序,具体的解决方法是配置环境变量,这里以Windows 10操作系统为例介绍配置环境变量的方法,具体如下。
(1)在“此电脑”图标上单击鼠标右键,然后在弹出的快捷菜单中选择“属性”命令,并在弹出的“系统”窗口中单击“高级系统设置”超链接,将出现图1.8所示的“系统属性”对话框。
(2)单击“环境变量”按钮,将弹出“环境变量”对话框,如图1.9所示。
图1.8 “系统属性”对话框
图1.9 “环境变量”对话框
(3)在“mingribccd的用户变量”中,选择“Path”环境变量,单击“编辑”按钮,将弹出“编辑环境变量”对话框,单击“新建”按钮,在新建的编辑文本框中输入G:\Python\Python38,再次单击“新建”按钮,在新建的编辑文本框中输入G:\Python\Python38\Scripts\,最后单击“确定”按钮,如图1.10所示,回到“环境变量”对话框。(注意G 盘为编者安装Python的路径,读者可以根据实际情况进行修改。)
图1.10 编辑环境变量
(4)单击“环境变量”中的“Path”环境变量,可以看到刚添加的变量值,如图1.11所示。单击“确定”按钮,完成环境变量的配置。
图1.11 查看添加的变量值
(5)在“命令提示符”窗口中,输入 Python 命令,如果Python解释器可以成功运行,说明配置成功。如果已经正确配置了环境变量,仍无法启动Python解释器,建议重新安装Python。
通常情况下,为了提高开发效率,需要使用相应的开发工具。进行Python开发也可以使用开发工具,下面将介绍利用Python自带的集成开发和学习环境(IDLE)进行编程。
在安装Python后,会自动安装IDLE。它是Python Shell(可以在打开的IDLE主窗口的标题栏上看到),也就是一个通过输入文本与程序进行交互的途径,程序开发人员可以利用它与Python交互。下面将详细介绍如何使用IDLE开发Python程序。
打开IDLE时,可以单击Windows 10操作系统的“开始”菜单,然后依次选择“所有程序”→“Python 3.8”→“IDLE (Python 3.8 64-bit)”命令,即可打开IDLE主窗口,如图1.12所示。
图1.12 IDLE主窗口
(1)在IDLE主窗口的菜单栏上,选择“File”→“New File”命令,将打开一个新窗口。在该新窗口中,可以直接编写Python代码,并且输入一行代码后再按〈Enter〉键,将自动换到下一行,等待继续输入,如图1.13所示。
图1.13 新创建的Python文件窗口
(2)在代码编辑区中,编写“hello world”程序,代码如下。
print("hello world")
(3)编写完成的代码效果如图1.14所示。按快捷键<Ctrl +S>保存文件,这里将其保存为demo.py,其中.py是Python文件的扩展名。
图1.14 代码效果
(4)运行程序。在菜单栏中选择“Run”→“Run Module”命令(或按<F5>键),运行结果如图1.15所示。
图1.15 运行结果
说明
程序运行结果会在IDLE中呈现,每运行一次程序,程序运行结果就会在IDLE中呈现一次。
在程序开发过程中,合理地使用快捷键,不但可以降低代码的错误率,而且可以提高开发效率。因此,掌握一些IDLE常用的快捷键是必须的。在IDLE中,可通过选择“Options”→“Configure IDLE”命令,在打开的“Settings”对话框的“Keys”选项卡中查看快捷键,但该界面是英文的,不便于查看,所以编者将一些IDLE常用的快捷键通过表1.1列出。
表1.1 IDLE常用的快捷键
快捷键 |
说明 |
适用环境 |
---|---|---|
F1 |
打开Python帮助文档 |
Python文件窗口和Python Shell窗口均可用 |
Alt+P |
浏览历史命令(上一条) |
仅Python Shell窗口可用 |
Alt+N |
浏览历史命令(下一条) |
仅Python Shell窗口可用 |
Alt+/ |
自动补全前面曾经出现过的单词。如果之前有多个单词具有相同的前缀,可以连续按该快捷键,在多个单词中循环来选择 |
Python文件窗口和Python Shell窗口均可用 |
Alt+3 |
注释代码块 |
仅Python文件窗口可用 |
Alt+4 |
取消代码块注释 |
仅Python文件窗口可用 |
Alt+G |
转到某一行 |
仅Python文件窗口可用 |
Ctrl+Z |
撤销操作 |
Python文件窗口和Python Shell窗口均可用 |
Ctrl+Shift+Z |
恢复上一次的撤销操作 |
Python文件窗口和Python Shell窗口均可用 |
Ctrl+S |
保存文件 |
Python文件窗口和Python Shell窗口均可用 |
Ctrl+] |
缩进代码块 |
仅Python文件窗口可用 |
Ctrl+[ |
取消代码块缩进 |
仅Python文件窗口可用 |
Ctrl+F6 |
重新启动Python Shell |
仅Python Shell窗口可用 |
说明
由于IDLE使用起来简单、方便,很适合练习用,所以本书将IDLE作为开发工具。
在Python中,使用内置的print()函数可以将结果输出到IDLE或者标准控制台上。print()函数的语法格式如下。
print(value, ..., sep=' ', end='\n', file=sys.stdout, flush=False)
参数说明如下。
value:表示要输出的值;可以是数字、字符串、各种类型的变量等。
…:值列表,表示可以一次性输出多个值;输出多个值时,需要使用“,”(英文逗号)分隔,输出的各个值之间默认用空格隔开。
sep:表示输出的各个值之间的间隔符,默认是一个空格,也可以设置为其他的分隔符。
end:表示输出完最后一个值后需要添加的字符串,用来设定输出语句以什么结尾,默认是换行符“\n”,即输出完会跳到新行;可以换成其他字符串,如end='\t' 或end=' '等。
file:表示输出的目标对象,可以是文件,也可以是数据流,默认是sys.stdout。也可以设置“file = 文件存储对象”,把内容存到该文件中。
flush:表示是否立刻将输出语句输出到目标对象,flush的值为False或者True,默认flush=False,表示输出值会存在缓存;当flush=True时,输出值会被强制写入文件。
其中,输出内容可以是数字和字符串(字符串需要使用引号括起来),此类内容将直接输出;输出内容也可以是包含运算符的表达式,此类内容将计算结果输出。例如:
a = 100 # 变量a,值为100
b = 5 # 变量b,值为5
print(9) # 输出数字9
print(a) # 输出变量a的值100
print(a*b) # 输出a*b的结果500
print("go big or go home") # 输出“go big or go home”(要么出众,要么出局)
多学两招
在Python中,默认情况下,使用print()语句输出结果后会自动换行,如果想要一次输出多个内容,而且不换行,可以将要输出的内容使用英文逗号分隔。下面的代码将在一行上输出变量a和b的值,以及字符串。
print(a,b,'要么出众,要么出局') # 输出结果:100 5 要么出众,要么出局
注意
sep、end、file、flush都必须以命名参数方式传参,否则会被当作需要输出的对象。
提示
如果print()函数不传递任何参数,将会输出end参数的默认值,即输出空行。
数值可以直接输出,但使用“+”连接数值和其他类型数据时,系统会默认为加法计算,会报错。可以使用“,”连接,或者将数值作为字符串来处理,即在两端加英文单引号或英文双引号。
print(1314) # 直接输出整数,可不带英文双引号或英文单引号
1314
print(12.22) # 直接输出浮点数
12.22
print(10 / 3) # 可以包含运算表达式,输出运算结果
3.3333333333333335
print(100 * 3.13 + 60) # 可以包含运算表达式,输出运算结果
373
print(2, 0, 2, 0) # 使用“,”连接要输出的数值,输出结果中间用空格分隔
2 0 2 0
print(192, 168, 1, 1, sep='.') # 使用“.”连接输出数值,数值间用“.”分隔
192.168.1.1
print("广州恒大" + 43) # 不能直接使用“+”连接字符串和数值,会报错
TypeError: can only concatenate str (not“int”) to str
print("广州恒大" + str(43)) # 使用“+”连接字符串和数值时,数值要转换为字符串
广州恒大43
print("广州恒大", 43) # 使用“,”连接字符串和数值,输出的字符串和数值用
空格分隔
广州恒大 43
print("%e" % 120563332111098) # 使用操作符“"%e"%”格式化数值为科学记数法
1.205633e+14
zfill()函数可按指定位数输出编号,如将输入的数字格式化为5位编号输出,代码如下。
instr=input('请输入一个数字:')
print (instr.zfill(5)) # 输出5位编号
运行程序,输入一个数字,会将其格式化为5位编号,如图1.16所示。
图1.16 输出5位编号
在Python中,使用内置函数input()可以接收用户用键盘输入的信息。input()函数的基本用法如下。
variable = input("提示文字")
其中,variable为保存输入结果的变量,双引号内的提示文字表示用于提示要输入的内容。例如,想要接收用户输入的内容,并保存到变量tip中,可以使用下面的代码实现。
tip = input("请输入文字:")
在Python 3.x中,无论输入的是数字还是字符,都将被当作字符串读取。如果想要接收数值,需要把接收到的字符串进行类型转换。例如,想要接收整型的数字并保存到变量num中,可以使用下面的代码。
num = int(input("请输入您的幸运数字:"))
想要获得字符对应的ASCII值该如何实现呢?通过ord()函数可以将字符的ASCII值转换为数字。下面的代码用于实现根据输入字符,输出相应的ASCII值。
name=input("输入字符:") # 输入字母或数字,不能输入汉字
print(name+" 的ASCII值为:",ord(name)) # 显示字符对应的ASCII值
如输入字符“A”,则结果输出为“A的ASCII值为65”;输入数字5,则结果输出为“5的ASCII值为53”。
示例 根据输入的年份,计算年龄大小。
实现根据输入的年份(4位数字,如1981),计算目前的年龄。程序中使用input()函数输入年份,使用datetime模块获取当前年份,然后用当前年份减去输入的年份,就是计算的年龄,代码如下。
import datetime # 调入时间模块
imyear = input("请输入您的出生年份:") # 输入的出生年份必须是4位数字的,如1981
nowyear= datetime.datetime.now().year # 计算当前年份
age = nowyear- int(imyear) # 用于计算实际年龄
print("您的年龄为:"+str(age ) +"岁") # 输出年龄
# 根据计算的年龄判断所处的年龄阶段
if age<18: # 如果年龄小于18岁
print("您现在为未成年人 ~@_@~") # 输出为“您现在为未成年人 ~@_@~”
if age>=18 and age<66: # 如果18≤age<66
print("您现在为青年人 (-_-)") # 输出为“您现在为青年人 (-_-)”
if age>=66 and age<80: # 如果66≤age<80
print("您现在为中年人~@_@~") # 输出为“您现在为中年人~@_@~”
if age>=80: # 如果age≥80
print("您现在为老年人 *-_-* ") # 输出为“您现在为老年人*-_-*”
运行程序,会提示输入出生年份,如图1.17所示。输入出生年份,出生年份必须是4位数字,如1981。
输入出生年份,如输入2007,按<Enter>键,运行结果如图1.18所示。
图1.17 提示输入出生年份
图1.18 根据输入的年份计算年龄
使用input()输入信息时,提示信息参数可以为空(不提示任何信息),也可以和转义字符结合(如在提示信息后加\n,表示在提示信息后换行)。常见应用代码如下。
name = input("") # 无提示型输入,不换行
name1 = input("name:") # 简洁型输入,不换行
name2 = input("请输入您的姓名:") # 提示型输入,不换行
name3 = input("姓名:\n") # 提示型输入,换行
运行结果如下。
张三丰
name:李铁
请输入您的姓名:理想
姓名:
李世民
输入数据时,可能会输入空格等非法字符,这时可以使用字符串的strip()、lstrip()或rstrip()等方法去除输入的非法字符。例如下面的代码。
name = input("请输入您的姓名:").strip(' ') # 去除输入数据两端的空格
age = input("请输入您的年龄:").lstrip(' ') # 去除输入数据左侧的空格
print(name)
print(age)
运行结果如下。
请输入您的姓名: joy
请输入您的年龄: 12
joy 12
input()函数支持多个数据的输入,输入的时候通常使用字符串的split()方法进行分割,如同时输入某一地点的坐标值等。示例代码如下。
# 一行输入两个不限定类型的值
x,y=input("请输入出发地点的横、纵坐标值,用英文逗号分隔:").split(',')
name,age,height=input('请输入你的姓名、年龄和身高,用英文逗号分隔:\n').split(',')
# 一行输入两个限定类型为整型的值
a,b=map(int,input('请输入两个数,用空格分隔:\n').split())
print(x,y)
print(age)
print(a,b)
运行结果如下。
请输入出发地点的横、纵坐标值,用英文逗号分隔:123,210
请输入你的姓名、年龄和身高,用英文逗号分隔:
joy,22,1.68
请输入两个数,用空格分隔:
27 89
123 210
22
27 89
说明
如果不按指定规则输入,将输出“ValueError: not enough values to unpack”异常。
通过循环语句也可以实现多个数据的输入,也需要使用字符串的split()方法对输入的数据进行分割。代码如下。
sum = 0
for x in input('请输入多个加数,中间用空格分隔:').split(' '):
sum = sum+int(x)
print(sum)
运行结果如下。
请输入多个加数,中间用空格分隔:
1 2 3 4 5 6 7 8
36
用户通过input()函数输入的数据都是字符串类型的,有时程序要求输入的数据为某种特定数据类型,如整型、浮点型或日期型等,这时就需要在输入后进行强制转换。例如,使用int()函数将用户输入的字符串类型的数据转换为整型数据。代码如下。
age = int(input('age:'))
print(age)
print(type(age))
运行结果如下。
age:30
30
<class 'int'>
有时对输入的数据是有一定要求的,如首字母大写、全部为小写等,这时可以使用字符串的lower()、upper()、capitalize()或title()等方法对输入的数据进行强制转换。代码如下。
password = input('请输入您的密码:').upper() # 将输入的数据转换为全部大写
name = input('请输入您的姓名:').capitalize() # 将输入的数据转换为首字母大写
school = input('请输入您的学校:').title() # 将输入的数据全部转换为首字母大写
print(password,name,school) # 输出以上转换后的内容
运行结果如下。
请输入您的密码:abcdefg
请输入您的姓名:joy
请输入您的学校:harvard university
ABCDEFG Joy Harvard University
Python提供了一些对输入数据进行验证的方法,通过这些方法可以非常方便地判断输入内容是大写字母、小写字母、数字或空白字符等。主要方法如下。
isalnum():用于验证所有字符都是数字或者字母。
isalnum():用于验证所有字符都是字母。
isdigit():用于验证所有字符都是数字。
islower():用于验证所有数据都是小写。
isupper():用于验证所有数据都是大写。
istitle():用于验证所有数据都是首字母大写,类似标题。
isspace():用于验证所有数据都是空白字符,如\t、\n、\r。
使用字符串的isdigit()方法可以验证输入数据是否为数字。例如,需要输入纯数字方可进入系统,否则将退出系统,代码如下。
if input('请输入数字验证码:').isdigit():
print('正在登录草根之家商务系统!')
else:
print('输入非法,将退出系统!')
输入纯数字的运行结果如下。
请输入数字验证码:1314
正在登录草根之家商务系统!
输入非纯数字的运行结果如下。
请输入数字验证码:q1e2
输入非法,将退出系统!
注释,是指在代码中对代码功能进行解释说明的标注性文字,可以提高代码的可读性,让代码更容易理解和维护。程序运行时,注释的内容将被Python解释器忽略,并且不会在执行结果中体现出来。
编写程序时,及时添加注释不但可以记录程序的作用和功能,还可以通过注释对程序进行调试,这是一些有经验的编程人员经常使用的调试手段。
Python通常包括3种类型的注释,分别是单行注释、多行注释和中文编码声明注释。
在Python中,可使用“#”作为单行注释的符号。从“#”开始直到换行为止,其中的所有内容都作为注释而被Python解释器忽略。语法格式如下。
# 注释内容
单行注释可以放在要注释代码的前一行,也可以放在要注释代码的右侧。例如,下面的两种注释形式都是正确的。
当行注释(注释直接占一行) :
# 数字竞猜小游戏程序
# 预设竞猜数字给变量instr
instr = input("请输入预设的竞猜数字:")
行末注释(在代码的右侧添加注释):
guess = -1 # 设置默认输入的竞猜数字为-1
print("======数字猜谜小游戏======") # 输出游戏名称
while guess != number: # 如果竞猜错误,重新竞猜
使用当行注释还是行末注释,需要根据编写程序的实际情况进行选择,当需要解释、说明的内容较多时,推荐使用当行注释。当行注释和行末注释的综合应用代码如下。
# 用户登录判断程序
# 只要输入user列表中的用户,就可以模拟登录系统
user=['like','ming','sun','xiaobei','star'] # 用户名称列表
while True: # 要求重复输入,直到输入正确的用户名称
instr = input('用户名称:') # 要求输入用户名称
if instr in user: # 如果输入的用户在列表中
print('正在进入系统,请稍后!')
break # 退出程序
else:
print('密码不正确,请重新输入!')
continue # 继续执行程序
注意
在任何代码行前面加上“#”符号,该行代码就可以变成注释。利用这个方法,在遇到程序中暂时无法调试的代码时,可以先将其变成注释的形式,进行部分程序的优先调试。
在Python中,并没有单独的多行注释标记,而是将包含在一对三引号(' ' '……' ' ')或者(" " "……" " ")之间的内容都称为多行注释。这样的内容将被解释器忽略。由于这样的内容可以分为多行编写,所以也作为多行注释。语法格式如下。
'''
注释内容1
注释内容2
……
'''
或者
"""
注释内容1
注释内容2
……
"""
多行注释通常用来为Python文件、模块、类或者函数等添加版权、功能等信息,例如,下面的代码将使用多行注释为程序添加功能、开发者、版权所有、开发日期等信息。
'''
信息加密模块
开发者:天星
版权所有:明日科技
2018年9月
'''
多行注释也经常被用来解释代码中重要的函数、参数等信息,便于后续开发者维护代码,例如:
'''
库存类主要的函数
update改/更新
find查找
delete删除
create添加
'''
多行注释其实可以采用单行注释多行书写的方式实现,如上面的多行注释可以写成如下形式。
# 库存类主要的函数
# update改/更新
# find查找
# delete删除
# create添加
在Python中编写代码的时候,如果用到指定字符编码类型的中文编码,需要在文件开头加上中文编码声明注释,这样可以在程序中指定字符编码类型的中文编码,不至于出现代码错误。所以说,中文编码声明注释很重要。Python 3.x提供的中文编码声明注释语法格式如下。
# -*- coding:编码 -*-
或者
# coding=编码
例如,保存文件编码格式为UTF-8,可以使用下面的中文编码声明注释。
# -*- coding:utf-8 -*-
为代码添加注释,是一个优秀的程序员必须要做的工作。但要确保注释的内容都是重要的,看一眼就知道代码的作用,而有些代码是不需要加注释的。
说明
在上面的代码中,“-*-”没有特殊的作用,只是为了美观才加上的,所以上面的代码也可以使用“# coding:utf-8”代替。
为了便于读者理解程序中的代码,本书对大多数代码都进行了注释。在实际开发中,读者只要对关键代码进行注释就可以了,不必像本书一样。
在编码时,有些代码可能会出现编码错误,无法编译;或者我们不希望编译、运行程序中的某些代码,这时可以将这些代码注释掉。这种调试方式简单、实用,有经验的程序员经常采用这种方式进行程序调试。下面以计算长方形的对角线长、周长和面积为例来演示如何通过注释调试程序。计算长方形的对角线长、周长和面积的代码如下。
a,b=map(float,input('请输入长方形两个边的边长,用英文逗号间隔:').split(','))
s=a*b
l=(a+b)*2
d=(a**2+b**2)**(1/2)
print('长方形的对角线长为:',d) # 输出长方形的对角线长
print('长方形周长为:',l) # 输出长方形周长
print('长方形面积为:',s) # 输出长方形面积
在上面的代码中,如果只想计算长方形面积,但要保留计算对角线长和周长的代码,则只需将计算对角线长和周长的代码注释即可,代码如下。
a,b=map(float,input('请输入长方形两个边的边长,用英文逗号间隔:').split(','))
s=a*b
# l=(a+b)*2
# d=(a**2+b**2)**(1/2)
# print('长方形的对角线长为:',d) # 输出长方形的对角线长
# print('长方形周长为:',l) # 输出长方形周长
print('长方形面积为:',s) # 输出长方形面积
在上面的代码中,如果想计算长方形的面积和周长,则只需将计算周长的代码恢复即可,代码如下。
a,b=map(float,input('请输入长方形两个边的边长,用英文逗号间隔:').split(','))
s=a*b
l=(a+b)*2
# d=(a**2+b**2)**(1/2)
# print('长方形的对角线长为:',d) # 输出长方形的对角线长
print('长方形周长为:',l) # 输出长方形周长
print('长方形面积为:',s) # 输出长方形面积
Python采用代码缩进和冒号“:”区分代码之间的层次。缩进可以使用<Space>键或者<Tab>键实现。使用<Space>键时,通常情况下采用4个空格作为缩进量;而使用<Tab>键时,则将按一次<Tab>键产生的缩进作为缩进量。通常情况下建议使用<Space>键进行缩进。
在Python中,对于类定义、函数定义、流程控制语句,以及异常处理语句等,行尾的冒号和下一行的缩进表示一个代码块的开始,而缩进结束,则表示一个代码块的结束。
例如,下面代码中的缩进为正确的缩进。
pwd = input("输入密码:").strip() # 要求输入密码,strip()方法用于去除空格
repwd = input("确认密码:").strip() # 要求输入确认密码,strip()方法用于去除空格
if pwd == repwd : # 判断密码是否一致
print("密码输入正确!") # 输出"密码输入正确!"
else:
print("确认密码与输入密码不一致!") # 输出"确认密码与输入密码不一致!"
Python对代码的缩进要求非常严格,同一个级别的代码块的缩进量必须相同。如果不进行合理的代码缩进,将抛出SyntaxError异常。例如,代码中有的缩进量是4个空格,还有的是3个空格,就会出现SyntaxError异常,如图2.1所示。
图2.1 缩进量不同导致的SyntaxError异常
在IDLE中,一般以4个空格作为基本缩进量。不过也可以选择“Options”→“Configure IDLE”命令,在打开的“Settings”对话框(如图2.2所示)的“Fonts/Tabs”选项卡中修改基本缩进量。
图2.2 修改基本缩进量
多学两招
在IDLE的文件窗口中,可以通过选择主菜单中的“Format”→“Indent Region”命令(或按快捷键<Ctrl+]>),将选中的代码进行缩进(向右移动指定的缩进量),也可通过选择主菜单中的“Format”→“Dedent Region”命令(或按快捷键<Ctrl+[>),对代码进行反缩进(向左移动指定的缩进量)。
Python采用PEP 8作为编码规范,其中PEP是Python Enhancement Proposal的缩写,翻译成中文是Python增强建议书,而8表示版本号。PEP 8是Python代码的样式指南。下面给出PEP 8编码规范中的一些应该严格遵守的条目。
每个import语句只导入一个模块,尽量避免一次导入多个模块。图2.3所示为推荐写法,而图2.4所示为不推荐写法。
图2.3 推荐写法
图2.4 不推荐写法
不要在行尾添加分号“;”,也不要用分号将两条命令放在同一行。例如,图2.5所示的代码为不规范写法。
图2.5 不规范写法
建议每行不超过80个字符,如果超过,建议使用圆括号“()”将多行内容隐式地连接起来,而不推荐使用反斜线“\”进行连接。例如,某个字符串文本在一行上显示不完全,那么可以使用圆括号将其分行显示,代码如下。
print("虽然我是一只蜗牛,我一直在爬,也许还没有爬到金字塔的顶端,"
"但是只要我在爬,就足以给自己带来令生命感动的瞬间。")
例如,以下通过反斜线进行连接的做法是不推荐使用的。
print("虽然我是一只蜗牛,我一直在爬,也许还没有爬到金字塔的顶端,\
但是只要我在爬,就足以给自己带来令生命感动的瞬间。")
不过以下两种情况除外。
导入模块的语句过长。
注释里的URL。
使用必要的空行可以增加代码的可读性。一般在顶级定义(如函数或者类的定义)之间空两行,而在方法定义之间空一行。另外,在用于分隔某些功能的位置也可以空一行。
通常情况下,在运算符两侧、函数参数之间、逗号“,”两侧建议使用空格进行分隔。
应该避免在循环中使用“+”和“+=”运算符累加字符串。这是因为字符串是不可变的,这样做会创建不必要的临时对象。推荐将每个子字符串加入列表,然后在循环结束后使用join()方法连接列表。
适当使用异常处理结构可提高程序的容错性,但不能过分依赖异常处理结构,适当的显式判断还是必要的。
关键字是Python中被赋予了特定意义的一些单词,开发程序时,不可以把关键字作为变量、函数、类、模块和其他对象的名称来使用。Python的常用关键字如表2.1所示。
表2.1 Python的常用关键字
关键字 |
|||||
---|---|---|---|---|---|
def |
del |
elif |
else |
except |
finally |
for |
from |
False |
global |
if |
import |
in |
is |
lambda |
nonlocal |
not |
None |
or |
pass |
raise |
return |
try |
True |
while |
with |
yield |
注意
在Python的关键字中,True、False、None这3个关键字的首字母需要大写,其他关键字全部小写,如果写错,将会影响程序执行或者导致报错。代码如下。
password=['123456','888888','666666']
while True: # True首字母大写
passin = input('请输入您的密码:')
if passin in password: # 如果输入的密码在列表中
print('正在进入系统,请稍后!')
break # 退出系统
else:
print('您输入的密码不正确,请重新输入')
continue # 继续输入密码
运行程序,分别输入密码123000和888888,运行结果如下。
请输入您的密码:123000
您输入的密码不正确,请重新输入
请输入您的密码:888888
正在进入系统,请稍后!
如果将关键字True写成true,则程序会把true当成没有定义的变量,报出如下错误。
NameError: name 'true' is not defined
大部分关键字在程序代码中起着重要的作用,如循环语句中的if、elif、else、while、for等,逻辑判断中经常用到的True、False,逻辑运算符and、or、not等。关键字通常在开发环境中以特殊颜色显示。
关键字、内置对象、字符串等通过不同颜色进行区分,以便于代码输入和阅读。
如果在代码中使用这些关键字定义变量、函数、类,将会造成语法冲突,所以一定不要使用关键字定义变量、函数等。如把关键字while作为变量使用,运行程序,将会弹出图2.6所示的错误(语法错误)。代码如下。
while=5
错误所在位置将会以红色高亮显示,如图2.7所示。所以遇到语法错误时,可以看看是否出现了关键字非法使用的情况。
图2.6 while定义变量错误
图2.7 高亮显示错误处
注意
Python中所有的关键字是区分字母大小写的。例如,and、as、if、True、False是关键字,但是And、AS、IF、false、ture就不是关键字,如图2.8和图2.9所示。
图2.8 True是关键字,但true不是关键字
图2.9 if是关键字,但IF不是关键字
多学两招
Python中的关键字可以在IDLE中输入以下两行代码查看。
import keyword
keyword.kwlist
运行结果如图2.10所示。
图2.10 查看Python中的关键字
标识符可以简单地理解为名字,它主要用来标识变量、函数、类、模块和其他对象。
Python标识符命名规则如下。
由字母A~Z和a~z、下画线“_”和数字组成,并且第一个字符不能是数字。
不能使用Python中的关键字。
不能包含空格、“@”、“%” 以及 “$” 等特殊字符。
例如,下面是合法的标识符。
USERID
book
user_id
myclass # 关键字和其他字符组合是合法的标识符
book01 # 数字在标识符的后面是可以的
下面是非法的标识符。
4word # 以数字开头
class # class是Python中的关键字
@book # 不能使用特殊字符"@"
book name # book和name之间包含了特殊字符空格
注意
在Python中,标识符的字母是严格区分大小写的。两个同样的单词,如果大小写不一样,所代表的意义是完全不同的。例如,下面3个变量是完全独立、毫无关系的,就像相貌相似的“三胞胎”,彼此都是独立的个体。
book = 0 # 全部小写
Book = 1 # 部分大写
BOOK = 2 # 全部大写
Python中以下画线开头的标识符有特殊意义,一般应避免使用相似的标识符。
以单下画线开头的标识符(如_width)表示不能直接访问的类属性,也不能通过“from xxx import *”导入。
以双下画线开头的标识符(如__add)表示类的私有成员。
以双下画线开头和结尾的是Python里专用的标识符,如“__init__()”表示构造函数。
说明
在Python中允许使用汉字作为标识符,如“我的名字=”明日科技””,在程序运行时并不会出现错误(如图2.11所示),但建议读者尽量不要使用汉字作为标识符。
图2.11 使用汉字作为标识符
标识符的命名,除了要遵守以上这几条规则外,不同场景中的标识符,其名称也有一定的规范可循。
当标识符用作模块名时,应尽量短小,并且全部使用小写字母,可以使用下画线分割多个字母,如 game_main、game_register 等。
当标识符用作包的名称时,应尽量短小,也全部使用小写字母,不推荐使用下画线,如 com.mr、com.mr.book 等。
当标识符用作类名时,应采用单词首字母大写的形式。例如,定义一个图书类,可以命名为 Book。
模块内部的类名,可以采用“下画线+首字母大写”的形式,如 _Book。
函数名、类中的属性名和方法名,应全部使用小写字母,多个单词之间可以用下画线分割。
常量命名应全部使用大写字母,单词之间可以用下画线分割。