目录
目录
1. 基本认识
Python 是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言。
Python 的设计具有很强的可读性,相比其他语言经常使用英文关键字,其他语言的一些标点符号,它具有比其他语言更有特色语法结构。
- Python 是一种解释型语言: 这意味着开发过程中没有了编译这个环节。类似于PHP和Perl语言。
- Python 是交互式语言: 这意味着,您可以在一个 Python 提示符
>>>
后直接执行代码。 - Python 是面向对象语言: 这意味着Python支持面向对象的风格或代码封装在对象的编程技术。
- Python 是初学者的语言:Python 对初级程序员而言,是一种伟大的语言,它支持广泛的应用程序开发,从简单的文字处理到 WWW 浏览器再到游戏。
1.2 Python语言特点
- Python语法简洁、清晰。
- Python是纯粹的自由软件。
- Python是一个高级程序设计语言,将许多机器层面上的实现细节隐藏,交给编译器处理。Python程序员可以花更多的时间用于思考程序的逻辑,而不是具体的机器实现细节。这一特征使得Python开始流行,尤其是在非计算机专业领域得到更加广泛的关注。
- Python具有良好的跨平台特性。
- Python是一种解释性语言。首先把Python编写的源代码转换成字节码的中间形式。运行时,解释器再把字节码翻译成适合于特定环境的机器语言并运行。这使得Python程序更加易于移植。
- Python语言具有良好的可扩展性。例如,Python可以调用使用C、C++等语言编写的程序,可以调用R语言中专业的数据分析功能。
- Python标准库非常庞大,可以处理各种工作。
1.3 Python的应用领域
目前Python在Web应用后端开发、云基础设施建设、DevOps、网络数据采集(爬虫)、自动化测试、数据分析、机器学习等领域都有着广泛的应用。
2. python基础语法
2.1 标识符
-
第一个字符必须是字母表中字母或下划线
_
。 -
标识符的其他的部分由字母、数字和下划线组成。
-
标识符对大小写敏感。
-
在 Python 3 中,可以用中文作为变量名,非 ASCII 标识符也是允许的了。
2.2 关键字
我们不能把关键字用作任何标识符名称。
Python 的标准库提供了一个 keyword 模块,可以输出当前版本的所有关键字:(也就是说所有这些keyword都不能拿来做变量名或者标识符哦)
import keyword
keyword.kwlist
2.3 注释
Python中单行注释以 # 开头,实例如下:
# 第一个注释
print ("Hello, Python!") # 第二个注释
多行注释可以用多个#号,也可以用'''
和"""
# 第一个注释
# 第二个注释
'''
第三注释
第四注释
'''
"""
第五注释
第六注释
"""
print ("Hello, Python!")
2.4 行与缩进
python最具特色的就是使用缩进来表示代码块,不需要使用大括号 {}
。
缩进的空格数是可变的,但是同一个代码块的语句必须包含相同的缩进空格数。实例如下:
if True:
print ("True")
else:
print ("False")
if True:
print ("Answer")
print ("True")
else:
print ("Answer")
print ("False") # 缩进不一致,会导致运行错误
Python 通常是一行写完一条语句,但如果语句很长,我们可以使用反斜杠\
来实现多行语句,例如:
item_one = 1
item_two = 2
item_three = 3
total = item_one + \
item_two + \
item_three
在 [], {}, 或 () 中的多行语句,不需要使用反斜杠\
,例如:
total = ['item_one', 'item_two', 'item_three',
'item_four', 'item_five']
2.5 输入与输出
输入
input()
函数用于输入数据,无论用户输入什么内容,该函数都返回字符串类型。其格式如下:input(prompt=None, /)
。其中prompt表示提示信息,默认为空,如果不空,则显示提示信息。然后等待用户输入,输入完毕后按回车键,并将用户输入作为一个字符串返回,并自动忽略换行符。
x=input("请输入x值")
x
type(x) #查看x的类型
当用户输入10,按回车键之后,input()
函数将字符串'10'赋予变量x,结果就是字符串'10'。内置函数type()返回对象的类型。
输出
Python中最简单的输出方式就是使用print()
函数。其格式如下:
print(value, ..., sep=' ', end='\n', file=sys.stdout, flush=False)
其中各参数的解释如下:
- value: 表示需要输出的对象,一次可以输出一个或者多个对象(其中...表示任意多个对象),当输出多个对象时,对象之间要用逗号
,
分隔; - sep:表示输出时对象之间的间隔符,默认用一个空格分隔;
- end:表示输出以何字符结尾,默认值是换行符;
- file:表示输出位置,可将输出到文件,file指定的对象要有“写”的方法,默认值是sys.stdout(标准输出);
- flush:将缓存里面的内容是否强制刷新输出,默认值是False。
print('hello','world','!')#一次输出三个对象。中间默认用空格隔开
print('hello','world','!',sep='*')#一次输出三个对象,中间用*隔开。
3. 使用帮助
Python提供了dir
和help
函数供用户查看模块、函数等的相关说明。
以查看math模块的相关说明为例,在Python命令窗口中输入dir(math)
即可查看math模块的可用属性和函数。
import math
dir(math)
help函数可以查看模块、函数等的详细说明信息。例如在import math
后,输入命令help(math)
,将列出math模块中所有的常量和函数详细说明。如果输入help(math.sqrt)
将只列出math.sqrt函数的详细信息。
import math
help(math.sqrt)
4. 变量
4.1 变量赋值
Python 中的变量不需要声明。每个变量在使用前都必须赋值,变量赋值以后该变量才会被创建。
在 Python 中,变量就是变量,它没有类型,我们所说的"类型"是变量所指的内存中对象的类型。
等号=
用来给变量赋值。
等号=
运算符左边是一个变量名,等号=
运算符右边是存储在变量中的值。例如:
counter = 100 # 整型变量
miles = 1000.0 # 浮点型变量
name = "你好" # 字符串
print (counter)
print (miles)
print (name)
4.2 多变量赋值
Python允许你同时为多个变量赋值。例如:
a = b = c = 1
print(a,b,c)
以上实例,创建一个整型对象,值为 1,从后向前赋值,三个变量被赋予相同的数值。
您也可以为多个对象指定多个变量。例如:
a, b, c = 1, 2, "你好" #将两个整型对象 1 和 2 的分配给变量 a 和 b,字符串对象 "你好" 分配给变量 c。
print(a,b,c)
4.3 变量类型
在程序设计中,变量是一种存储数据的载体。
计算机能处理的数据有很多种类型,除了数值之外还可以处理文本、图形、音频、视频等各种各样的数据,那么不同的数据就需要定义不同的存储类型。
Python中的数据类型很多,我们先介绍几种常用的数据类型。
- 整型
int
:Python中可以处理任意大小的整数 - 浮点型
float
:浮点数也就是小数,之所以称为浮点数,是因为按照科学记数法表示时,一个浮点数的小数点位置是可变的,浮点数除了数学写法(如123.456)之外还支持科学计数法(如1.23456e2)。 - 字符串型
str
:字符串是以单引号或双引号括起来的任意文本,比如'hello'和"hello"。 - 布尔型:布尔值只有True、False两种值,要么是True,要么是False,在Python中,可以直接用True、False表示布尔值(请注意大小写),也可以通过布尔运算计算出来(例如3 < 5会产生布尔值True,而2 == 1会产生布尔值False)。
- 复数型:形如3+5j,跟数学上的复数表示一样,唯一不同的是虚部的i换成了j。实际上,这个类型并不常用,大家了解一下就可以了。
4.4 变量的使用¶
下面通过几个例子来说明变量的类型和变量使用。
"""
使用变量保存数据并进行加减乘除运算
"""
a = 321
b = 12
print(a + b) # 333
print(a - b) # 309
print(a * b) # 3852
print(a / b) # 26.75
在Python中可以使用type函数对变量的类型进行检查。程序设计中函数的概念跟数学上函数的概念是一致的,数学上的函数相信大家并不陌生,它包括了函数名、自变量和因变量。如果暂时不理解这个概念也不要紧,我们会在后续的章节中专门讲解函数的定义和使用。
"""
使用type()检查变量的类型
"""
a = 100
b = 12.345
c = 1 + 5j
d = 'hello, world'
e = True
print(type(a)) # 打印出变量a的类型
print(type(b))
print(type(c))
print(type(d))
print(type(e))
可以使用Python中内置的函数对变量类型进行转换。
int( ):将一个数值或字符串转换成整数,可以指定进制。
float( ):将一个字符串转换成浮点数。
str( ):将指定的对象转换成字符串形式,可以指定编码。
chr( ):将整数转换成该编码对应的字符串(一个字符)。
ord( ):将字符串(一个字符)转换成对应的编码(整数)。
下面的代码通过键盘输入两个整数来实现对两个整数的算术运算。
"""
使用input()函数获取键盘输入(字符串)
使用int()函数将输入的字符串转换成整数
使用print()函数输出带占位符的字符串
"""
a = int(input('a= '))
b = int(input('b = '))
print('%d + %d = %d' % (a, b, a + b))
print('%d - %d = %d' % (a, b, a - b))
print('%d * %d = %d' % (a, b, a * b))
print('%d / %d = %f' % (a, b, a / b))
print('%d // %d = %d' % (a, b, a // b))
print('%d %% %d = %d' % (a, b, a % b))
print('%d ** %d = %d' % (a, b, a ** b))
5. 运算符
Python支持多种运算符,下面大致按照优先级从高到低的顺序列出了所有的运算符。
运算符的优先级指的是多个运算符同时出现时,先做什么运算然后再做什么运算。除了我们之前已经用过的赋值运算符和算术运算符,我们稍后会陆续讲到其他运算符的使用。
5.1 赋值运算符
赋值运算符应该是最为常见的运算符,它的作用是将右边的值赋给左边的变量。下面的例子演示了赋值运算符和复合赋值运算符的使用。
"""
赋值运算符和复合赋值运算符
"""
a = 10
b = 3
a += b # 相当于:a = a + b
a *= a + 2 # 相当于:a = a * (a + 2)
print(a) # 算一下这里会输出什么
5.2 比较运算符
比较运算符有的地方也称为关系运算符,包括==、!=、<、>、<=、>=,我相信没有什么好解释的,大家一看就能懂。
- 唯一需要提醒的是比较相等用的是==,请注意这个地方是两个等号,因为=是赋值运算符,我们在上面刚刚讲到过,==才是比较相等的比较运算符。比较运算符会产生布尔值,要么是True要么是False。
5.3 逻辑运算符
逻辑运算符有三个,分别是and、or和not。
(1)and字面意思是“而且”,所以and运算符会连接两个布尔值,如果两个布尔值都是True,那么运算的结果就是True;左右两边的布尔值有一个是False,最终的运算结果就是False。
- 相信大家已经想到了,如果and左边的布尔值是False,不管右边的布尔值是什么,最终的结果都是False,所以在做运算的时候右边的值会被跳过(短路处理),这也就意味着在and运算符左边为False的情况下,右边的表达式根本不会执行。
(2)or字面意思是“或者”,所以or运算符也会连接两个布尔值,如果两个布尔值有任意一个是True,那么最终的结果就是True。当然,or运算符也是有短路功能的,在它左边的布尔值为True的情况下,右边的表达式根本不会执行。
(3)not运算符的后面会跟上一个布尔值,它的作用是得到与该布尔值相反的值,也就是说,后面的布尔值如果是True运算结果就是False,而后面的布尔值如果是False则运算结果就是True。
"""
比较运算符和逻辑运算符的使用
"""
flag0 = 1 == 1
flag1 = 3 > 2
flag2 = 2 < 1
flag3 = flag1 and flag2
flag4 = flag1 or flag2
flag5 = not (1 != 2)
print('flag0 =', flag0) # flag0 = True
print('flag1 =', flag1) # flag1 = True
print('flag2 =', flag2) # flag2 = False
print('flag3 =', flag3) # flag3 = False
print('flag4 =', flag4) # flag4 = True
print('flag5 =', flag5) # flag5 = False
tips:比较运算符的优先级高于赋值运算符,所以flag0 = 1 == 1先做1 == 1产生布尔值True,再将这个值赋值给变量flag0。print函数可以输出多个值,多个值之间可以用,
进行分隔,输出的内容之间默认以空格分开。
6. 分支结构
迄今为止,我们写的Python代码都是一条一条语句顺序执行,这种代码结构通常称之为顺序结构。
然而仅有顺序结构并不能解决所有的问题。
比如我们设计一个游戏,游戏第一关的通关条件是玩家获得1000分,那么在完成本局游戏后,我们要根据玩家得到分数来决定究竟是进入第二关,还是告诉玩家“Game Over”,这里就会产生两个分支,而且这两个分支只有一个会被执行。类似的场景还有很多,我们将这种结构称之为“分支结构”或“选择结构”。给大家一分钟的时间,你应该可以想到至少5个以上这样的例子,赶紧试一试。
6.1 if语句
Python中if语句的一般形式如下所示:
if condition_1:
statement_block_1
elif condition_2:
statement_block_2
else:
statement_block_3
- 如果 "condition_1" 为 True 将执行 "statement_block_1" 块语句
- 如果 "condition_1" 为False,将判断 "condition_2"
- 如果"condition_2" 为 True 将执行 "statement_block_2" 块语句
- 如果 "condition_2" 为False,将执行"statement_block_3"块语句
Python 中用 elif 代替了 else if,所以if语句的关键字为:if – elif – else。
注意:
1、每个条件后面要使用冒号:
,表示接下来是满足条件后要执行的语句块。
2、使用缩进来划分语句块,相同缩进数的语句在一起组成一个语句块。
# 用户名是admin且密码是123456则身份验证成功否则身份验证失败
username = input('请输入用户名: ')
password = input('请输入密码: ')
if username == 'admin' and password == '123456':
print('身份验证成功!')
else:
print('身份验证失败!')
当然如果要构造出更多的分支,可以使用if...elif...else...结构或者嵌套的if...else...结构,下面的代码演示了如何利用多分支结构实现分段函数求值。
x = float(input('x = '))
if x > 1:
y = 3 * x - 5
elif x >= -1:
y = x + 2
else:
y = 5 * x + 3
print('f(%.2f) = %.2f' % (x, y))
当然根据实际开发的需要,分支结构是可以嵌套的,例如判断是否通关以后还要根据你获得的宝物或者道具的数量对你的表现给出等级(比如点亮两颗或三颗星星),那么我们就需要在if的内部构造出一个新的分支结构,同理elif和else中也可以再构造新的分支,我们称之为嵌套的分支结构,也就是说上面的代码也可以写成下面的样子。
x = float(input('x = '))
if x > 1:
y = 3 * x - 5
else:
if x >= -1:
y = x + 2
else:
y = 5 * x + 3
print('f(%.2f) = %.2f' % (x, y))
大家可以自己感受一下这两种写法到底是哪一种更好。在之前我们提到的Python之禅中有这么一句话“Flat is better than nested.”,之所以提倡代码“扁平化”是因为嵌套结构的嵌套层次多了之后会严重的影响代码的可读性,所以能使用扁平化的结构时就不要使用嵌套。
6.2 多分支if/elif/else语句
多分支结构比较复杂,可以画图表示如下:
实例
从键盘输入标准价格和订货量。根据订货量大小,价格给以不同的折扣,计算应付货款(应付货款=订货量×价格×(1-折扣))。
- 订货量300以下,没有折扣;
- 订货量300及以上,500以下,折扣为3%;
- 订货量500及以上,1000以下,折扣5%;
- 订货量1000及以上,2000以下,折扣8%;
- 订货量2000及以上,折扣10%。
分析:键盘输入标准价格price、订货量Quantity,依照上述标准进行判断得到折扣率。注意,还需要考虑订货量和标准价格输入小于0时的错误情况。
price=float(input('请输入标准价格'))
quantity=int(input('请输入订货量'))
if quantity<0:
coff=-1
elif quantity<300:
coff=0.0
elif quantity<500:
coff=0.03
elif quantity<1000:
coff=0.05
elif quantity<2000:
coff=0.08
else:
coff=0.1
if quantity>=0 and price>=0:
pays=quantity*price*(1-coff)
print('支付金额:',pays)
else:
print('输入的订货量与标准价格均不能小于零!')
6.3 选择结构的嵌套
在某一个分支的语句体中,又嵌套新的分支结构,这种情况称为选择结构的嵌套。选择结构的嵌套形式因问题不同而千差万别,因此分析透彻每一个分支的逻辑情况是编写程序的基础。
实例
输入客户类型、标准价格和订货量。根据客户类型(<5为新客户,>=5老客户)和订货量给予不同的折扣,计算应付货款(应付货款=订货量×价格×(1-折扣))。
如果是新客户:
订货量800以下,没有折扣;
否则折扣为2%。
如果是老客户:
订货量500以下,折扣为3%;
订货量500及以上,1000以下,折扣5%;
订货量1000及以上,2000以下,折扣8%;
订货量2000及以上,折扣10%。
ctype=int(input('请输入客户类型(小于5为新客户):'))
price=float(input('请输入标准价格:'))
quantity=int(input('请输入订货数量:'))
if ctype>0 and price>0 and quantity>0:
if ctype<5:
if quantity<800:
coff=0
else:
coff=0.02
else:
if quantity<500:
coff=0.03
elif quantity<1000:
coff=0.05
elif quantity<2000:
coff=0.08
else:
coff=0.1
pays=quantity*price*(1-coff)
print('支付金额:',pays)
else:
print('输入错误')