学习Python编程时,首先需要了解一些基本知识,包括Python编码规范、基本数据类型、常量和变量、基本运算符、表达式以及基本输入/输出等。下面介绍这些内容。
编码规范是使用Python语言编写程序代码时应遵循的命名规则、代码缩进、代码和语句的分隔方法等。良好的编码规范有助于提高代码的可读性,便于代码的修改和维护。
1.标识符命名规则
标识符用于表示常量、变量、函数以及类型等程序要素的名称。在Python中,标识符由字母、汉字、数字和下画线(_)组成,但不能以数字开头,也不能与关键字同名,标识符中使用的字母是区分大小写的。例如,var_a、var_b和User_ID都是合法的标识符,3-user和5student则不是;username、Username和UserName表示不同的标识符。
关键字是Python语言事先定义的一些具有特定含义的标识符,也称之为保留字。由于这些关键字具有特定含义,因此它们不能作为普通的标识符来使用,否则会出现语法错误。
2.代码缩进
在Python程序中,代码缩进代表代码块的作用域,如果一个代码块包含两个或更多语句,则这些语句必须具有相同的缩进量。编写代码时,建议使用4个空格来生成缩进。如果程序代码中使用了错误的代码缩进,程序运行时将会发出IndentationError错误的信息。
使用IDLE或PyCharm等工具编写代码时,编辑器会根据所输入的代码层次关系自动生成代码缩进,以提高编码效率。
3.使用分号
在Python程序中,允许在行尾添加分号,但并不建议添加分号,也不要在同一行中通过使用分号来分隔两条语句,建议每条语句单独占一行。
4.超长语句的续行
编写Python程序时,建议每行一般不要超过80个字符。对于超长语句,建议使用圆括号来连接行,允许但不提倡使用反斜线(\)来连接行。
在以“#”字符开始的注释中,即便是超过80个字符,也要将长的URL(统一资源定位符)或长的导入模块语句(import)放在同一行内。
5.使用圆括号
圆括号可用于长语句的续行,但不建议使用不必要的括号。
6.使用空行
不同函数或语句块之间可以使用空行来分隔,以区分两段功能或含义不同的代码,从而提高代码的可读性。
7.使用空格
对于赋值运算符、比较运算符和逻辑运算符,在运算符两侧各加一个空格,可使代码看起来更清晰。对于算术运算符,可以按个人习惯来决定是否使用空格。不建议在逗号、分号、冒号前面添加空格,但建议在它们后面添加空格,除非它们位于行尾。
8.使用注释
在 Python 程序中,注释分为单行注释和多行注释。单行注释也称为行内注释,它与语句在同一行中,注释以“#”字符开始直到行尾结束,“#”字符右边的内容在程序执行时被忽略。多行注释也称为批量注释,多行注释的内容可以有多行,这些内容必须包含在一对三引号内。三引号可以是3个单引号(′′′ ′′′),也可以是3个双引号(″″″ ″″″)。
【例1.2】 查看所有Python关键字。
【算法分析】
在Python中,可以使用import语句导入所需要的模块,其实质就是在一个文件中导入另一个文件,以便读取所导入文件的内容。在本例中,利用import语句导入Python的keyword模块,该模块中有两个成员,即kwlist变量和iskeyword函数,其中kwlist包含了所有的Python关键字,而iskeyword则可用来判定某一个字符串是否为关键字。利用import语句导入一个模块后,再引用该模块中的变量和函数,需要在变量或函数名前面冠以模块名和英文句点。例如,在本例中以keyword.kwlist作为print()函数的参数,其中keyword为模块名,kwlist为变量名,其值是一个列表。
【程序代码】
【运行结果】
Python提供的基本数据类型包括数值类型、字符串类型、布尔类型和空值等。
1.数值类型
数值类型用于存储数值,数值类型数据可以参与算术运算。数值类型包括整型、浮点型和复数型。
1)整型数据(int)。整型数据即整数,没有小数部分,但可以有正负号。在Python 3.x中,整型数据的值在计算机内的表示不是固定长度的,在内存容量允许的前提下,整型数据的取值范围几乎涵盖了所有整数,这为大数据处理带来了便利。
在Python中,整数常量可以用十进制、二进制、八进制和十六进制来表示。
十进制整数的表示形式与数学中相同,例如123、-326、0、2018等。
二进制整数用0b或0B作为前缀,只有0和1两个数码,例如0B1010、0B1110011等。
八进制整数用0o或0O作为前缀,一共有8个数码,即0~7,例如0o367、0o777等。
十六进制整数用0x或0X作为前缀,一共有16个数码,即数字0~9和小写字母a~f或大写字母A~F,例如0xcccc、0x3abcfed等。
2)浮点型数据(float)。浮点数表示一个实数。对于浮点数,Python 3.x默认提供17位有效数字的精度。浮点数有两种表示形式,即十进制小数形式和指数形式。
十进制小数形式由数字和小数点组成,例如1.23、3.1415926、0.0、186.0等。此外,十进制小数允许小数点后面没有任何数字,这表示小数部分为0,例如123.表示123.0。
指数形式是用科学计数法表示浮点数,用字母e或E表示以10为底数的指数。字母e之前为数字部分,可以带有小数部分,之后为指数部分,必须为整数,数字部分和指数部分必须同时出现。例如,3.6e123表示3.6×10 123 ,2.39e-9表示2.39×10- 9 。
3)复数型数据(complex)。复数是Python内置的数据类型。复数的表示形式为 a + b j,其中 a 为复数的实部, b 为复数的虚部,j表示虚数单位(表示-1的平方根),字母j也可以写成大写形式J。在Python语言中,可以使用real和imag属性来获取一个复数的实部和虚部。
【例1.3 】 输出各种数值类型常量。
【算法分析】
在Python中,可以使用内置函数type(obj)来检查参数obj的数据类型;对于整数、浮点数和复数,该函数的返回值分别为“<class′int′>”、“<class′float′>”和“<class′complex′>”。
【程序代码】
print(123456789)
#十进制整数
print(0b110111010101011)
#二进制整数
print(0o126731777)
#八进制整数
print(0x123456789abcdef)
#十六进制整数
print(type(123))
#查看整数的数据类型
print(123.456)
#十进制小数的浮点数
print(3.2e10)
#指数形式的浮点数
print(type(1.23))
#查看浮点数的数据类型
print(3+4j)
#复数
print((3+4j).real)
#查看复数的实部
print((3+4j).imag)
#查看复数的虚部
print(type(5+6j))
#查看复数的数据类型
【运行结果】
123456789
28331
22787071
81985529216486895
<class′int′>
123.456
32000000000.0
<class′float′>
(3+4j)
3.0
4.0
<class′complex′>
2.字符串类型
字符串是使用单引号、双引号或三引号(3个单引号或3个双引号)括起来的任意文本。例如,′′,′Python′,′He said,″hello!″′,″″,″It′s right.″,′′′中国梦′′′等,其中 ′′ 和 ″″ 表示空字符串。三引号常用于定义文档字符串,文档字符串可以通过对象的__doc__属性来提取。
使用何种符号作为定界符可以根据需要来选择。如果字符串内容中包含双引号,则可以使用单引号作为定界符,反之亦然。使用单引号或双引号括起来的字符串只能是单行的,如果字符串是多行的,则需要使用三引号括起来。
在Python中,字符串是不可变对象,即字符串中的字符不能被改变。每当修改字符串时系统都将生成一个新的字符串对象。
转义字符是一些特殊字符,它们以反斜杠(\)开头,后面跟一个或多个字符。转义字符具有特定的含义,不同于字符本来的意义。例如,转义字符“\n”表示按〈Enter〉键换行,转义字符“\t”表示水平制表符(Tab)。常用的转义字符详见表1-1。
表1-1 常用转义字符
如果不想让转义字符生效,可使用 r 或 R 来定义原始字符串,以显示字符串原来的意思。例如,用print()函数输出“r″\t\n″”时将得到“\t\n”。
【例1.4】 在字符串中使用转义字符。
【算法分析】
利用print()函数输出多个字符串时,可以用sep参数指定不同输出项之间的分隔符,该参数的默认值为空格。若要将数据显示在不同的行,可将sep参数设置为转义字符“\n”;若要以水平制表符来分隔各个输出项,可将sep参数设置为转义字符“\t”。
【程序代码】
#在字符串中使用转义字符\n和\t
print(″编程语言排行榜:\nPython\tC\tJava\tC++″)
#使用单引号定义字符串
s1=′Python程序设计′
#检查字符串的数据类型
print(type(s1))
#在字符串中使用双引号
print(″\″class\″ 是Python语言中的关键字。″)
#使用三引号定义字符串
s2=″″″
白日依山尽,黄河入海流。
欲穷千里目,更上一层楼。
″″″
print(s2)
【运行结果】
编程语言排行榜:
Python C Java C++
<class′str′>
″class″ 是Python语言中的关键字。
白日依山尽,黄河入海流。
欲穷千里目,更上一层楼。
3.布尔类型
布尔(bool)类型数据常用于描述逻辑判断的结果。布尔类型数据只有两个值,即逻辑真和逻辑假,分别用True和False表示。将其他类型的数据转换为布尔值时,数值0(包括整数0和浮点数0.0)、空字符串、空值(None)以及空集合均被视为False,其他值均被视为True。
4.空值
在Python中,空值是一个特殊值,用None来表示。
变量用于存储程序中使用的各种数据,对应于计算机内存中的一块区域。变量通过唯一的标识符(即变量名)来表示,并且可以通过各种运算符对变量的值进行操作。
Python是一种动态类型的编程语言,不需要显式地声明变量的数据类型,可以直接对变量赋值,然后在程序中使用它。Python中的所有数据均被抽象为对象,通过赋值语句将变量指向特定的对象,使变量与对象关联起来。当对变量重新赋值时,并不会修改对象的值,而是重新创建一个对象并使其与变量关联起来。因此,在Python中,对于同一个变量可以先后使用不同的数据类型对其进行赋值。
变量是在首次使用赋值语句对其赋值时创建起来的。赋值语句的一般语法格式如下:
变量=表达式
在上述语法中,等号(=)称为赋值号;赋值号左边必须是变量,其右边则为表达式。进行赋值操作时,首先计算表达式的值并创建一个数据对象,然后使变量指向该数据对象。
变量中存放的并不是该数据对象的值,而是该数据对象的内存地址。这种通过内存地址间接访问数据对象的方式称为引用。使用内置函数id()可以获取由变量引用的内存地址。
通过变量之间的赋值可以使两个变量引用相同的对象,而使用身份运算符is则可以判定两个变量是否引用了同一个对象。
创建变量时,操作系统将为变量分配内存空间。对于已经存在的变量,可以使用del运算符将其删除,以释放所占用的内存空间。
常量是指首次赋值后保持固定不变的值的量,例如123、″Python″、True等。在Python中没有命名的常量,通常用一个不改变值的变量来表示常量,例如用PI=3.14来定义圆周率。
【例1.5 】 创建和检测变量。
【算法分析】
通过对一个变量赋值可以定义变量,然后使用另一个值重新对变量赋值,此时将创建另一个对象;使用一个变量对另一个变量赋值后,使用is运算符可以判定两个变量引用的是不是相同的对象。默认情况下,使用print()函数输出数据后将会自动换行,如果不希望换行,则可以将end参数设置为空字符串。
【程序代码】
x=123
print(″变量x\n\t引用的值:″,end=″″)
print(x)
print(″\t内存地址:″,end=″″)
print(id(x))
print(″\t数据类型:″,end=″″)
print(type(x))
x=″Python″
print(″变量x\n\t引用的值:″,end=″″)
print(x)
print(″\t内存地址:″,end=″″)
print(id(x))
print(″\t数据类型:″,end=″″)
print(type(x))
y=x
print(″变量y\n\t引用的值:″,end=″″)
print(y)
print(″\t内存地址:″,end=″″)
print(id(x))
print(″\t数据类型:″,end=″″)
print(type(y))
if x is y:
print(″变量x和y引用的是相同的对象″)
【运行结果】
变量x
引用的值:123
内存地址:1863351584
数据类型:<class′int′>
变量x
引用的值:Python
内存地址:2218650007904
数据类型:<class′str′>
变量y
引用的值:Python
内存地址:2218650007904
数据类型:<class′str′>
变量x和y引用的是相同的对象
当通过赋值创建变量时,Python会根据表达式的值来确定变量的数据类型。使用type()函数可以检测变量的数据类型。在实际应用中,还可以根据需要对变量进行类型转换,此时将产生一个目标类型的新对象。变量的类型转换可以通过下列类型转换函数来实现。
1)int(),用于将其他数据类型转换为整数。
2)float(),用于将其他数据类型转换为浮点数。
3)round(),用于按“四舍六入五留双”的规则将浮点数转换为整数。例如,round(1.23)的值为1,round(1.5)和round(2.5)的值均为2。
4)str(),用于将其他数据类型转换为字符串。
5)bool(),用于将其他数据类型转换为布尔型,其转换规则是将数字0和空字符串转换为False,将所有非0数字和非空字符串转换为True。
6)chr()和ord(),用于在整数与字符之间进行相互转换。chr()函数是按ASCII码将一个整数转换为对应的字符,ord()函数则将字符转换为对应的ASCII码或Unicode码。
【例1.6 】 变量的数据类型转换。
【算法分析】
可以通过调用类型转换函数来实现变量的数据类型转换,例如将一个浮点型变量转换为整型、字符串或布尔型,可以通过调用ord()函数以求出字符的ASCII码或Unicode码。
【程序代码】
x=123.456
print(″变量x\n\t转换为整数:″,end=″″)
print(int(x))
print(″\t四舍六入五留双:″,end=″″)
print(round(x))
print(″\t转换为字符串:″,end=″″)
print(str(x))
print(″\t转换为布尔值:″,end=″″)
print(bool(x))
y=″A″
print(″变量y\n\t字符:″,end=″″)
print(y)
print(″\tASCII码:″,end=″″)
print(ord(y))
z=″汉″
print(″变量z\n\t字符:″,end=″″)
print(z)
print(″\tUnicode码:″,end=″″)
print(ord(z))
【运行结果】
变量x
转换为整数:123
四舍六入五留双:123
转换为字符串:123.456
转换为布尔值:True
变量y
字符:A
ASCII码:65
变量z
字符:汉
Unicode码:27721
运算符用于指定对数据进行何种运算。Python提供了丰富的运算符,按照功能可分为算术运算符、赋值运算符、关系运算符、逻辑运算符、位运算符、身份运算符以及成员运算符等;按照操作数的数目可分为单目运算符、双目运算符以及三目运算符。运算符具有不同的优先级(从高到低)和结合性(从左到右或从右到左),在不用圆括号的情况下优先级和结合性决定了运算的先后次序。
1.算术运算符
算术运算符可以用于对操作数进行算术运算,其运算结果是数值类型。Python提供的各种算术运算符详见表1-2。
表1-2 算术运算符
(续)
2.关系运算符
关系运算符亦称比较运算符,用于比较两个操作数的大小,其运算结果是一个布尔值。关系运算符的操作数可以是数字或字符串。若操作数是字符串,系统则会从左向右逐个比较每个字符的Unicode码,直到出现不同的字符或字符串为止。所有关系运算符详见表1-3。
表1-3 关系运算符
3.逻辑运算符
逻辑运算符用于布尔值的运算,包括逻辑与、逻辑或和逻辑非。其中逻辑与和逻辑或是双目运算符,逻辑非是单目运算符。Python提供的逻辑运算符详见表1-4。
表1-4 逻辑运算符
4.位运算符
位运算符用于对数字的二进制位进行运算。位运算符包括左移运算符(<<)、右移运算符(>>)、按位与运算符(&)、按位或运算符(|)、按位异或运算符(^)以及按位取反运算符(~),这些运算符的功能和应用示例详见表1-5。
表1-5 位运算符
(续)
5.身份运算符
身份运算符用于比较两个对象的内存地址是否相同,这些运算符的功能和应用示例详见表1-6。
表1-6 身份运算符
6.成员运算符
成员运算符用于判定对象是否存在于字符串等序列中,其功能和应用示例详见表1-7。
表1-7 成员运算符
【例1.7 】 各种基本运算符的应用。
【算法分析】
使用各种基本运算符时,需要注意操作数和运算结果的数据类型。算术运算的操作数(运算对象)和结果都是数值类型;关系运算的操作数可以是数值和字符串,运算结果则是布尔型;逻辑运算的操作数和结果都是布尔型;身份运算和成员运算的结果都是布尔型。
【程序代码】
#创建变量
x=5
y=3
#算术运算
print(″x=″,x,″,y=″,y,sep=″″)
print(″x+y=″,x+y,sep=″″)
print(″x-y=″,x-y,sep=″″)
print(″x*y=″,x*y,sep=″″)
print(″x/y=″,x/y,sep=″″)
print(″x//y=″,x//y,sep=″″)
print(″x%y=″,x%y,sep=″″)
print(″x**y=″,x**y,sep=″″)
#关系运算
print(″x==y返回″,x==y,sep=″″)
print(″x>y返回″,x>y,sep=″″)
print(″x>=y返回″,x>=y,sep=″″)
print(″x<y返回″,x<y,sep=″″)
print(″x<=y返回″,x<=y,sep=″″)
print(″x!=y返回″,x!=y,sep=″″)
#逻辑运算
print(″x>y and y<2返回″,x>y and y<2,sep=″″)
print(″x>y or y<2返回″,x>y or y<2,sep=″″)
print(″not(x>y)返回″,not(x>y),sep=″″)
#身份运算
print(″x is y返回″,x is y,sep=″″)
#成员运算
print(″y in′Python′返回″,y in′Python′,sep=″″)
【运行结果】
x=5,y=3
x+y=8
x-y=2
x*y=15
x/y=1.6666666666666667
x//y=1
x%y=2
x**y=125
x==y返回False
x>y返回True
x>=y返回True
x<y返回False
x<=y返回False
x!=y返回True
x>y and y<2返回False
x>y or y<2返回True
not(x>y)返回False
x is y返回False
′y′in′Python′返回True
表达式是运算符和运算对象组成的有意义的组合,运算对象亦称为操作数,它可以是常量、变量,也可以是函数的返回值。通过运算符对表达式中的值进行若干次运算,最终得到表达式的返回值。
按照运算符的种类,可将表达式分为算术表达式、关系表达式、逻辑表达式以及测试表达式等。多种运算符混合运算可形成复合表达式,此时系统会按照运算符的优先级和结合性依次进行运算。如果需要,用户也可以使用圆括号来改变运算顺序。
常见的运算符按照优先级从低到高的顺序排列(同一行优先级相同)如下。
很多运算对操作数的类型是有要求的。例如,加法运算要求两个操作数类型必须相同,若操作数类型不一致,则可能会发生隐式类型转换。例如,在整数与浮点数相加时,整数会隐式转换为浮点数。若操作数类型差别比较大,则不会发生隐式类型转换,在这种情况下就需要进行显式类型转换。在整数与字符串相加时,根据需要可以将整数转换为字符串,然后进行字符串连接;或者将字符串转换为整数,然后进行整数相加。
表达式的返回值类型由操作数和运算符共同决定。关系、逻辑和测试表达式的值必为布尔值,连接(+)和重复(*)字符串的结合还是字符串,对两个整数进行算术运算结果可能是整数或浮点数,对两个浮点数进行算术运算结果还是浮点数。
【例1.8 】 对于给定的 a 、 b 、 c ,求解二次方程 ax 2 + bx + c =0。
【算法分析】
从数学中可以知道,二次方程 ax 2 + bx + c =0的根可以利用以下求根公式进行计算:
为此,可将 a 、 b 、 c 的值代入求根公式,从而构造出算术表达式。由于Python支持复数数据类型,所以系统可以在复数范围内求解,不需要判断是否存在实数根。
【程序代码】
#设置二次项系数a、一次项系数b和常数项c的值
a=6
b=2
c=5
#利用求根公式计算二次方程的两个根
x1=(-b+(b*b-4*a*c)**0.5)/(2*a)
x2=(-b-(b*b-4*a*c)**0.5)/(2*a)
print(″当a=6,b=2,c=5时,二次方程的两个根如下:″)
print(″x1=″,x1,sep=″″)
print(″x2=″,x2,sep=″″)
【运行结果】
当a=6,b=2,c=5时,二次方程的两个根如下:
x1=(-0.1666666666666666+0.8975274678557507j)
x2=(-0.1666666666666667-0.8975274678557507j)
习题1
一、选择题
1.Python语言的第一个版本发布于()。
A.1980年
B.1990年
C.1995年
D.2000年
2.在使用Python程序时可以利用()模块来访问Access数据库。
A.sqlite3
B.pymysql
B.win32.client
D.pymssql
3.Python命令行终端python.exe的提示符是()。
A.>
B.?
C.$
D.>>>
4.在Python Shell中运行当前打开的程序,可以按下()键。
A.F2
B.F4
C.F5
D.F8
5.在下列各项中,()不是合法的Python标识符。
A.username
B.3_user_name
C.Username
D.user_name
6.在Python程序中,多行注释可以包含在一对()内。
A.#
B.
C.″(双引号)
D.′′′(三引号)
7.文档字符串可以通过对象的()属性来提取。
A.__doc__
B._doc_
C.doc
D.__doc
8.要将字符转换为对应的ASCII码或Unicode码,可以使用()函数。
A.round()
B.ord()
C.chr()
D.str()
二、判断题
1.()使用Python 2.x编写的程序可以在Python 3.0上正常运行。
2.()Python有交互式和脚本式两种编程模式。
3.()Python是一种编译型语言,Python程序必须编译成二进制代码才能运行。
4.()在Python程序中,一个代码块包含的多个语句可以具有不同的缩进量。
5.()在Python程序中,每条语句末尾必须添加分号。
6.()使用keyword模块中的kwlist变量可以查看全部Python关键字。
7.()在Python 3.x中,只要内存容量允许,整型数据的取值范围几乎可以涵盖所有整数。
8.()在Python中,复数的表示形式为 a + b i,其中 a 为实部, b 为虚部,i表示虚数单位。
9.()在Python中,字符串中的字符可以被改变。
10.()将其他类型的数据转换为布尔值时,数值0(含整数0和浮点数0.0)空字符串、空值(None)以及空集合被视为False,其他值均被视为True。
11.()使用内置函数id()可以获取由变量引用的内存地址。
12.()使用delete运算符可以删除已经存在的变量,以释放所占用的内存空间。
三、编程题
1.在IDLE中输入一条语句,以显示Tim Peters编写的“Python之禅”。
2.在IDLE中输入语句,以查看所有Python关键字。
3.对于给定的 a 、 b 、 c ,编写程序求解二次方程 ax 2 + bx + c =0。