人工智能技术之PYTHON语法
• 掌握Python基本语法
• 掌握变量与数据类型
• 掌握运算符
Python的一大优势是易学习,但这并不代表本章知识可以随便翻阅有所了解即可,所谓万丈高楼平地起,只有熟练掌握基础知识,才能游刃有余地使用这门语言。
2.%2 Python基本语法
2.1.%3 注释
注释即对程序代码的解释,在写程序时需适当使用注释,以方便自己和他人理解程序各部分的作用。在执行时,它会被Python解释器忽略,因此不会影响程序的执行,Python支持单行注释与多行注释,具体如下所示。
1. 单行注释
该注释是以“#”开始,到该行末尾结束,具体示例如下:
# 输出千锋教育
print("千锋教育")
2. 多行注释
该注释以三个引号作为开始和结束符号,其中三个引号可以是三个单引号或三个双引号,具体示例如下:
'''
多行注释
输出千锋教育
'''
"""
多行注释
输出千锋教育
"""
print("千锋教育")
2.1.%3 标识符与关键字
现实世界中每种事物都有自己的名称,从而与其他事物区分开。例如,现实生活中每种交通工具都有一个名称用来标识,如图2.1所示。
图2.1 现实生活中的标识符
在Python语言中,同样也需要对程序中各个元素命名加以区分,这种用来标识变量、函数、类等元素的符号称为标识符。
Python语言规定,标识符是由字母、数字和下画线组成的,并且只能以字母或下画线开头的字符集合。在使用标识符时应注意以下几点:
• 命名时应遵循见名知义的原则。
• 系统已用的关键字不得用作标识符。
• 下画线对解释器有特殊的意义,建议避免使用下划线开头的标识符。
• 标识符是区分大小写的。
关键字是系统已经定义过的标识符,它在程序中已有了特定的含义,如if、class等,因此不能再使用关键字作为其他名称的标识符,表2.1列出了Python中常用的关键字。
表2.1 常用的关键字
False |
None |
True |
and |
as |
assert |
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 |
|
|
|
另外,Python的标准库提供了一个keyword模块,可以输出当前版本的所有关键字,具体示例如下:
>>> import keyword
>>> keyword.kwlist
['False', 'None', 'True', 'and', 'as', 'assert', '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']
2.1.%3 语句换行
Python中一般是一条语句占用一行,但有时一条语句太长,就需要换行,具体示例如下:
print("千锋教育隶属于北京千锋互联科技有限公司,\
一直秉承用良心做教育的理念,致力于打造IT教育全产业链人才服务平台。")
print(["千锋教育", "扣丁学堂",
"好程序员特训营"])
示例中,第1行print()中字符串太长,分开两行编写,在第1行末尾添加反斜杠(\)来实现,但在 []、{}中分行时,可以不使用反斜杠,如示例中的第3、4行。
2.1.%3 缩进
Python语言简洁体现在使用缩进来表示代码块,而不像C++或Java中使用{},具体示例如下:
if True:
print("如果为真,输出:")
print("True")
else:
print("否则,输出:")
print("False")
示例中,if后的条件为真,执行第2、3行,它们使用相同的缩进来表示一个代码块,此处需注意,缩进的空格数是可变的,但同一个代码块中的语句必须包含相同的缩进空格,具体示例如下:
if True:
print("如果为真,输出:")
print("True")
else:
print("否则,输出:")
print("False") # 缩进不一致,引发错误
示例中,第5行与第6行缩进不一致,会引发错误,程序运行结果如图2.2所示。
图2.2 缩进不一致引发错误
在Pycharm中,缩进是自动添加的。在其他文本编辑器中使用缩进,推荐读者使用4个空格宽度作为缩进,尽量不要使用制表符作为缩进,因为不同的文本编辑器中制表符代表的空白宽度不一致。
2.%2 变量与数据类型
2.2.1 变量
变量是编程中最基本的单元,它会暂时引用用户需要存储的数据,例如小千的年龄是18,就可以使用变量来引用18,如图2.3所示。
图2.3 变量
在图2.3中,变量名age是一个标识符,通过赋值符(=)将数据18与变量名age建立关系,这样age就代表18,此时可以通过print()查看age的值,具体示例如下:
age = 18
print(age)
如果想将小千的年龄修改为20并输出,则可以使用以下语句:
age = 20
print(age)
2.2.2 数据类型
在计算机中,操作的对象是数据,那么读者来思考下,如何选择合适的容器来存放数据才不至于浪费空间?先来看一个生活中的例子,某公司要快递一本书,文件袋和纸箱都可以装载,但是,如果使用纸箱装一本书,显然有点小题大做,浪费纸箱的空间,如图2.4所示。
图2.4 纸箱与文件袋快递一本书
同理,为了更充分利用内存空间,可以为不同的数据指定不同的数据类型。Python的数据类型,如图2.5所示。
图2.5 数据类型
在图2.4中,Python的数据类型分为数字类型(int、float、complex、bool)、字符串类型、列表类型、元组类型、字典类型和集合类型。考虑到读者知识有限,因此本节只介绍数字类型,其他数据类型将在后面的章节中讲解。
1. 整型
整型表示存储的数据是整数,例如1、-1等,在计算机语言中,整型数据可以用二进制、八进制、十进制、十六进制在面加上“+”或“-”表示正整数或负整数,如果用二进制表示,数字前必须加上0b或0B;如果用八进制表示,数字前必须加上0o或0O;如果用十六进制表示,数字前必须加上0x或0X,具体示例如下:
a = 0b1010 # 二进制数,等价于十进制数10
b = -0b1010 # 二进制数,等价于十进制数-10
c = 10 # 十进制数10
d = -10 # 十进制数-10
e = -0o12 # 八进制数,等价于十进制数-10
f = -0XA # 十六进制数,等价于十进制数-10
八进制数是由0~7的数字序列组成,每逢8进1位;十六进制数是由0~9的数字或A~F的字母组成序列,每逢16进1位。此处需注意,整型数值有最大取值范围,它的范围与平台有关。
2. 浮点型
浮点型表示存储的数据是实数,例如3.145等。在Python中,浮点型数据默认有两种书写格式,具体示例如下:
f1 = 0.314 # 标准格式
f2 = 31.4e-2 # 科学计数法格式,等价于0.314
f3 = 31.4E2 # 科学计数法格式,等价于3140.0
在科学计数法格式中,E或e代表基数是10,它后的数字代表指数,31.4e-2表示31.4×10-2,31.4E2表示31.4×102。
3. 复数型
浮点型用于表示数学中的复数,如1+2j、1-2j、-1-2j等,这种类型在科学计算中经常使用,其语法格式如下:
a = 3 + 1j
print(a.real) # 打印实部
print(a.imag) # 打印虚部
此处需注意它的写法与数学中写法的区别,当虚部为1j或-1j时,在数学中,可以省略1,但在程序中,1是不可以省略的。
4. 布尔型
布尔型是一种比较特殊的整型,它只有True和False两种值,分别对应1和0,它主要用来比较和判断,所得结果叫做布尔值。具体示例如下:
3 == 3 # 结果为True
3 == 4 # 结果为False
此外,每一个Python对象都有一个布尔值,从而可以进行条件测试,下面对象的布尔值为False,具体如下:
None
False(布尔型)
0(整型0)
0.0(浮点型0)
0.0 + 0.0j(复数型0)
""(空字符串)
[](空列表)
()(空元组)
[](空字典)
除上述对象外,其他对象的布尔值为True。
2.2.3 检测数据类型
在Python中,数据类型是由存储的数据决定的,为了检测变量所引用的数据是否符合期望的数据类型,Python中内置了检测数据类型的函数type(),可以对不同类型的数据进行检测,具体如下所示:
a = 10
print(type(a)) # <class 'int'>
b = 1.0
print(type(b)) # <class 'float'>
c = 1.0 + 1j
print(type(c)) # <class 'complex'>
示例中,使用type()函数分别检测a、b、c所引用数据的类型。
除此之外,还可以使用函数isinstance()判断数据是否属于某个类型,具体示例如下:
a = 10
print(isinstance(a, int)) # 输出True
print(isinstance(a, float)) # 输出False
2.2.4 数据类型转换
数据类型转换是指数据从一种数据类型转换为另一种数据类型,转换时,只需要将数据类型作为函数名即可,如表2.2所示。
表2.2 数据类型转换函数
函数 |
说明 |
int(x [,base]) |
将x转换为一个整数 |
float(x) |
将x转换为一个浮点数 |
complex(real [,imag]) |
创建一个复数 |
表2.2中列出的是数字类型之间的转换,其他类型之间也可以转换,如数字类型转换为字符串型,这些知识将在后面章节中讲解。
接下来演示数字类型之间转换,如例2-1所示。
例2-1
1 a = 2.0
2 print(type(a))
3 print(int(a)) # 将浮点型转为整型
4 print(type(int(a)))
5 b = 2
6 print(type(b))
7 print(float(b)) # 将整型型转为浮点型
8 print(type(float(b)))
9 c = complex(2.3, 1.2) # 创建一个浮点型数据
10 print(c)
11 print(type(c))
运行结果如图2.6所示。
图2.6 运行结果
在例2-1中,第3行使用int()函数将浮点型数据转为整型数据并通过print()函数输出,第7行使用float()函数将整型数据转为浮点型数据并通过print()函数输出,第9行使用complex()函数创建复数2.3+1.2j,可以认为将浮点数转为复数。
2.%2 运算符
运算符是用来对变量或数据进行操作的符号,也称作操作符,操作的数据称为操作数。运算符根据其功能可分为算术运算符、赋值运算符、比较运算符、逻辑运算符等。
2.3.1 算术运算符
算术运算符用来处理简单的算术运算,包括加、减、乘、除、取余等,具体如表2.3所示。
表2.3 算术运算符
运算符 |
说明 |
示例 |
结果 |
+ |
加 |
5 + 2 |
7 |
- |
减 |
5 - 2 |
3 |
* |
乘 |
5 * 2 |
10 |
/ |
除法 |
5 / 2 |
2.5 |
% |
取余 |
5 % 2 |
1 |
** |
幂 |
5**2 |
25 |
// |
取整除 |
5 // 2 |
2 |
在表2.3中,注意除法与整除的区别,接下来演示两者的区别,如例2-2所示。
例2-2
1 print(10/2) # 除法
2 print(5/2)
3 print(5.0/2)
4 print(5/2.0)
5 print(10//2) # 整除
6 print(5//2)
7 print(5.0//2)
8 print(5//2.0)
运行结果如图2.7所示。
图2.7 运行结果
在例2-2中,从运行结果可看出,进行除法运算的结果始终是浮点数,进行整除运算的结果可能是整数也可能是浮点数,只要两个操作数中有一个为浮点数,则结果就为浮点数。
2.3.2 赋值运算符
在前面章节的学习中,程序中已多次使用赋值运算符,它的作用就是将变量或表达式的值赋给某一个变量,具体示例如下:
a = 13
b = a + 1 # b为14
如果需要为多个变量赋相同的值,可以简写为如下形式:
a = b = 13
上述形式等价于
如果需要为多个变量赋不同的值,可以简写为如下形式:
a, b, c, d = 13, 3.14, 1 + 2j, True
输出a、b、c、d值时,可以使用如下语句:
print(a, b, c, d)
除此之外,还有几种特殊的赋值运算符,如表2.4所示。
表2.4 赋值运算符
运算符 |
说明 |
示例 |
+= |
加等于 |
a += b等价于a = a + b |
-= |
减等于 |
a -= b等价于a = a - b |
*= |
乘等于 |
a *= b等价于a = a * b |
/= |
除等于 |
a /= b等价于a = a / b |
%= |
余等于 |
a %= b等价于a = a % b |
**= |
幂等于 |
a **= b等价于a = a ** b |
//= |
取整等于 |
a //= b等价于a = a // b |
接下来演示赋值运算符的用法,如例2-3所示。
例2-3
1 a, b = 5, 2
2 a += b
3 print(a, b)
4 a -= b
5 print(a, b)
6 a *= b
7 print(a, b)
8 a /= b
9 print(a, b)
10 a **= b
11 print(a, b)
12 a //= b
13 print(a, b)
运行结果如图2.8所示。
图2.8 运行结果
在例2-3中,使用不同的赋值运算符对a、b进行运算,并将运算结果输出,从运行结果可发现,b的值始终不变。
2.3.3 比较运算符
比较运算符就是对变量或表达式的结果进行比较,如果比较结果为真,则返回true,否则返回False,具体如表2.5所示。
表2.5 比较运算符
运算符 |
说明 |
示例 |
结果 |
== |
等于 |
5 == 3 |
False |
!= |
不等于 |
5 != 3 |
True |
> |
大于 |
5 > 3 |
True |
>= |
大于等于 |
5 >= 3 |
True |
< |
小于 |
5 < 3 |
False |
<= |
小于等于 |
5 <= 3 |
False |
接下来演示比较运算符的使用,如例2-4所示。
例2-4
1 print(1 == 1)
2 print(1 == 2)
3 print(1 == True)
4 print(0 == False)
5 print(1.0 == True)
6 print(0.0 == False)
7 print((0.0 + 0.0j) == False)
运行结果如图2.9所示。
图2.9 运行结果
在例2-4中,注意1、1.0与True进行等于运算后,结果为True,0,0.0、0.0 + 0.0j与False进行等于运算后,结果为True。
2.3.4 逻辑运算符
逻辑运算符用来表示数学中的“与”、“或”、“非”,具体如表2.6所示。
表2.6 逻辑运算符
运算符 |
说明 |
示例 |
结果 |
and |
与 |
a and b |
如果a的布尔值为True,返回b,否则返回a |
or |
或 |
a or b |
如果a的布尔值为True,返回a,否则返回b |
not |
非 |
not a |
a为False,返回True;a为True,返回False |
在表2.6中,a、b分别为表达式,通常都是使用比较运算符返回的结果作为逻辑运算符的操作数。此外,逻辑运算符也经常出现在条件语句和循环语句中。
接下来演示逻辑运算符的使用,如例2-5所示。
例2-5
1 print(0 and 4)
2 print(False and 4)
3 print(1 and 4)
4 print(1 or 4)
5 print(True or 4)
6 print(0 or 4)
7 print((4 <= 5) and (4 >= 3))
8 print((4 >= 5) or (4 <= 3))
9 print(not 1)
运行结果如图2.10所示。
图2.10 运行结果
在例2-5中,通过print()函数输出每个逻辑表达式的值。
2.3.5 位运算符
位运算符是指对二进制位从低位到高位对齐后进行运算,具体如表2.7所示。
表2.7 位运算符
运算符 |
说明 |
示例 |
结果 |
& |
按位与 |
a & b |
a与b对应二进制的每一位进行与操作后的结果 |
| |
按位或 |
a | b |
a与b对应二进制的每一位进行或操作后的结果 |
^ |
按位异或 |
a ^ b |
a与b对应二进制的每一位进行异或操作后的结果 |
~ |
按位取反 |
~a |
a对应二进制的每一位进行非操作后的结果 |
<< |
向左移位 |
a << b |
将a对应二进制的每一位左移b位,右边移空的部分补0 |
>> |
向右移位 |
a >> b |
将a对应二进制的每一位右移b位,左边移空的部分补0 |
虽然运用位运算可以完成一些底层的系统程序设计,但Python程序很少参与到计算机底层的技术,因此这里只需了解位运算即可。
接下来演示位运算符的使用,如例2-6所示。
例2-6
1 a, b = 7, 8
2 print(bin(a)) # 二进制形式111
3 print(bin(b)) # 二进制形式1000
4 print(bin(a & b))
5 print(bin(a | b))
6 print(bin(a ^ b))
7 print(bin(~a))
8 print(bin(a << 2))
9 print(bin(a >> 2))
运行结果如图2.11所示。
图2.11 运行结果
在例2-6中,通过print()函数输出每个位运算符参与表达式的值,bin()的作用是将数据转换为二进制形式。
2.3.6 成员运算符
成员运算符用于判断指定序列中是否包含某个值,具体如表2.8所示。
表2.8 成员运算符
运算符 |
说明 |
in |
如果在指定序列中找到值,则返回True,否则返回False |
not in |
如果在指定序列中找到值,则返回False,否则返回True |
接下来演示成员运算符的使用,如例2-7所示。
例2-7
1 A = [1, 2, 3, 4] # 列表
2 print(1 in A)
3 print(0 in A)
4 print(1 not in A)
5 print(0 not in A)
运行结果如图2.12所示。
图2.12 运行结果
在例2-7中,通过print()函数输出每个成员运算符参与表达式的值。
2.3.7 身份运算符
身份运算符用于判断两个标识符是否引用同一对象,具体如表2.9所示。
表2.9 成员运算符
运算符 |
说明 |
is |
如果两个标识符引用同一对象,则返回True,否则返回False |
is not |
如果两个标识符引用同一对象,则返回False,否则返回True |
接下来演示身份运算符的使用,如例2-8所示。
例2-8
1 a = b = 10 # a、b都为10
2 print(a is b)
3 print(a is not b)
4 b = 20 # b修改为20
5 print(a is b)
6 print(a is not b)
运行结果如图2.13所示。
图2.13 运行结果
在例2-8中,通过print()函数输出每个身份运算符参与表达式的值。
2.3.8 运算符的优先级
运算符的优先级是指在多种运算符参与运算的表达式中优先计算哪个运算符,与算术运算中“先乘除,后加减”是一样的。如果运算符的优先级相同,则根据结合方向进行计算,表2.10中列出了运算符从高到低优先级的顺序。
表2.10 运算符优先级
运算符 |
说明 |
** |
幂 |
~ |
按位取反 |
*、/、%、// |
乘、除、取余、取整 |
+、- |
加、减 |
<<、>> |
左移、右移 |
& |
按位与 |
^ |
按位异或 |
| |
按位或 |
<=、<、>、>=、==、!= |
比较运算符 |
=、%=、/=、//=、*=、**=、+=、-+ |
赋值运算符 |
is、is not |
身份运算符 |
in、not in |
成员运算符 |
not |
非运算符 |
and |
与运算符 |
or |
或运算符 |
Python会根据表2.10中运算符的优先级确定表达式的求值顺序,同时还可以使用小括号“()”来控制运算顺序,任何小括号内的运算将最先计算,因此在程序开发中,不需要刻意记忆运算符的优先级顺序,而是通过小括号来改变优先级以达到目标。
2.%2 小案例
从键盘输入一个三位整数,计算并输出其百位、十位和个位上的数字,具体实现如例2-9所示。
例2-9
1 x = input('请输入一个三位整数:') # 从键盘输入字符串
2 x = int(x) # 将字符串转换为整数
3 a = x // 100 # 获取百位上数字
4 b = x // 10 % 10 # 获取十位上数字
5 c = x % 10 # 获取个位上数字
6 print('百位:', a, '十位:', b, '个位:', c)
程序运行时,从键盘输入356,则运行结果如图2.14所示。
图2.14 运行结果
在例2-9中,通过使用//和%运算符可以获取一个三位整数上百位、十位和个位上的数字。在后面学习map()函数后,本例还可以使用以下方法解决,具体如例2-10所示。
例2-10
1 x = input('请输入一个三位整数:')
2 a, b, c = map(int, x)
3 print('百位:', a, '十位:', b, '个位:', c)
程序运行时,从键盘输入356,则运行结果如图2.15所示。
图2.15 运行结果
读者在此处无须掌握此种用法,等学习完map()函数后,再翻阅本章此处的例题。
2.%2 本章小结
本章主要介绍了Python程序中的基本概念,从基本语法开始,接着讲解变量与数据类型,最后讲解运算符,学习完本章内容,读者需动手进行实践,为后面学习打好基础。
2.%2 习题
1.填空题
(1) 在Python中,单行注释以 开始。
(2) 标识符只能以 开头。
(3) 在Python中,使用 来表示代码块。
(4) 若a = 2,b = 4,则(a or b)的值为 。
(5) 布尔型数据只有 和False两种值。
2.选择题
(1) 下列整型数据用十六进制表示错误的是( )。
A.0xac B.0X22
C.0xB D.4fx
(2) 下列选项中,不属于数字类型的是( )。
A.整型 B.浮点型
C.复数型 D.字符串型
(3) 下列选项中,可以用来检测变量数据类型的是( )。
A.print() B.type()
C.bin() D.int()
(4) 若a = 7,b = 5,下列选项中正确的是( )。
A.a//b的值为1.4 B.a/b的值为1
C.a**b的值为35 D.a%b的值为2
(5) 下列表达式中为False的选项是( )。
A.0 == False B.False == ""
C.0.0 == False D.1.0 == True
3.思考题
(1) 简述标识符与关键字的区别。
(2) 简述Python中有哪些数据类型?
4.编程题
编写程序实现交换两个变量的值。
- 点赞
- 收藏
- 关注作者
评论(0)