You are on page 1of 77

1

Python 语言
程序设计
2

pintia.cn

曾奇斌 13950162105
qbzeng@xmu.edu.cn
3

 学习要求:

 认真听讲,适当做笔记

 积极上机,按时交作业

 有疑问及时交流, QQ 群
 助教老师:林雯颖( 13950060286 )

 成绩构成:平时 20%+ 期中 30%+ 期末 50%


 期中考试:第一章 ---- 第五章

 期未考试:全部,侧重 第六章 --- 第十章


4

第1章 Python 语言基础

Python 语言的发展与特点

Python 程序的运行环境

Python 数据类型

各种形式 Python 数据的表示方法


Python 的基本运算

5
1.1 Python 语言概述
1.1.1 Python 语言的发展历史

 Python 由荷兰的 Guido van Rossum 设计。


 Python 第一个版本于 1991 年初公开发行。
 Python 2.0 于 2000 年 10 月发布,增加了许多
新的语言特性。
 Python 3.0 于 2008 年 12 月发布,此版本不完
全兼容 Python 2.x ,导致 Python 2.x 与
Python 3.x 不兼容。
6

Python 创始人:吉多 · 范 · 罗苏姆( Guido van Rossum )


7
1.1.2 Python 语言的特点

1 . Python 语言的优势
( 1 )简单易学。 Python 语言语法结构简单,组
成一个 Python 程序也没有太多的语法细节和规则
要求,“信手拈来”就可以组成一个程序。
( 2 )程序可读性好。通过强制程序缩
进, Python 语言使得程序具有很好的可读性,同
时强制缩进规则也有利于程序员养成良好的程序设
计习惯。
8

( 3 )丰富的数据类型。除了基本的数值类型
外, Python 语言还提供了字符串、列表、元
组、字典和集合等丰富的复合数据类型。

( 4 )开源的语言。各种社区提供了成千上万不
同功能的开源函数模块,为基于 Python 语言的
快速开发提供了强大支持。
9

( 5 )解释型的语言。用 Python 语言编写的程序


不需要编译成二进制代码,而可以直接运行源代
码。

( 6 )面向对象的语言。 Python 语言既可以面向


过程,也可以面向对象,支持灵活的程序设计方
式。
10

2 . Python 语言的局限性
 Python 程序的运行速度比较慢。
 Python
用代码缩进来区分语法逻辑的方式可能给
初学者带来困惑,最常见的情况是 Tab 和空格的
混用会导致错误,而这是用肉眼无法分别的。
11
1.1.3 Python 语言的应用领域

1 . Windows 系统编程
2 .科学计算与数据可视化
3 .数据库应用
4 .多媒体应用
5 .网络应用
6 .电子游戏应用
1.2 Python 语言的开发环境 12

1.2.1 Python 系统的下载与安装

  从 Python 官网下载 Python 系统文件,下载地


址为 https://www.python.org/downloads/。选择基于
Windows 操作系统的最新版本 Python 下载。
  下载完成后运行进入 Python 系统安装界面。
13

• 安装时选中“ Add Python 3.X to PATH” 复选框,则会自动将安


装路径添加到环境变量 Path ,也可以在安装完成后添加。
14
14

 其他常用开发环境:

 Anaconda3( 内含 Jupyter notebook 和 Spyder) :

https://www.anaconda.com/download
集成了 Python 的运行环境
 PyCharm :

使用简单,功能强大
15
1.2.3 Python 程序的运行

1 .命令行形式的 Python 解释器


Windows 命令提示符下直接运行 python.exe 文件,
启动 Python 解释器。其中“ >>>” 是 Python 解释器
的提示符,在提示符后面输入语句, Python 解释器
将解释执行。
输入 quit() 命令可退出 Python 解释器。
16

Python 的命令执行方式(交互方式)
>>> print("Hello,World!")
Hello,World!
>>> print(1+3/4)
1.75
17
2 .图形用户界面形式的 Python 解释器
  选择“开始”→“所有程序”→“ Python
3.x”→“IDLE” 启动图形用户界面形式的 Python 解释
器,其窗口如图所示。

  
18
3. Python 的程序运行方式
( 1 )在 Python 解释器图形用户界面窗口,选择
“ File”→“New File” 命令,或按 Ctrl+N 键,打开程
序编辑窗口,如图所示。
19

  在程序编辑窗口输入程序的全部语句,例如:
a=10
b=20
print(a+b)
  选择“ File”→“Save” 命令,确定保存文件
位置和文件名,例如 e:\mypython\prog1.py 。
  选择“ Run”→“Run Module” 命令,或按
F5 键,运行程序并在 Python 解释器图形用户界面窗
口中输出运行结果。
在 Python 解释器提示符下运行 Python 程序 20

在 Python 解释器的提示符下执行 import 语句来导


入程序文件。例如,运行 prog1.py ,可以使用下面的语
句:

>>> import prog1

注意,模块文件名不加扩展名“ .py” 。

import 语句只能在第一次导入时运行文件,如果要
再次运行,就要调用 imp 标准库模块中的 reload 函数:

>>> import imp

>>> imp.reload(hello)
Windows 命令提示符下运行 Python 程序 21
在 Windows 命令提示符下切换到 Python 程序
文件所在文件夹 e:\mypython 。然后,输入
python ,后跟要执行的程序文件名即可,如图所
示。
22
Python 编程规范与代码优化建议

( 1 )缩进
 函数定义、选择结构、循环
for i in range(0,50):
结构等行尾的冒号表示缩进
print(i)
的开始。 print('*')
 python 程序是依靠代码块的
缩进来体现代码之间的逻辑 x=5

关系。
 同一个级别的代码块的缩进 def add5(num):

量必须相同。 return num+5


 一般而言,以 4 个空格或 1
print(‘hello’)
个制表符为基本缩进单位。
23
( 2 )空行与空格

最好在每个函数定义和一段完整的功能代码之后
增加一个空行,在运算符两侧各增加一个空格,
逗号后面增加一个空格。

( 3 )尽量不要写过长的语句。
如果语句确实太长,最好使用续行符 “ \” ,或
者使用圆括号将多行代码括起来表示是一条语
句。
24
基本输入输出

 input() 是 Python 的基本输入函数,用来接收


用户的键盘输入。
 print() 是 Python 的基本输出函数,用来把数据
以指定的格式输出
25
1) 标准输入函数 input()
 input() 的调用格式: input([ 提示字符串 ])
 功能: input() 函数从标准输入设备(键盘)读取一行

数据,并返回一个字符串(去掉结尾的换行符)。
 “ 提示字符串”是可选项。如果有“提示字符

串”,则原样显示,提示用户输入数据。
>>> x = input('Please input: ')
Please input: zhang shan
>>> x
' zhang shan'
26

 不论用户输入什么内容, input() 一律返回字符串


>>> x = input('Please input: ')
Please input: 123

>>> x
'123'
27

 必要的时候可以使用内置函数 int() 或 eval() 对用户输


入的内容进行类型转换。

>>> int('345') >>> x = input('Please input: ')


345 Please input: 1
出错了
>>> eval('3+5') >>> x+2

8
>>> x = int(input('Please input: '))
Please input: 1
这个可以有
>>> x+2
28
2) 基本输出函数 print()

 内置函数 print() 用于输出信息到标准控制台或


指定文件,语法格式为:
print(value1, value2, ... )
value1, value2, ... 为需要输出的内容;
>>> print(1, 3, 5, 7)
1357 # 默认用空格分隔数据
29
输入三角形边长,求面积

import math # 导入数学库


a = int(input())
b = int(input())
c = int(input())
s = (a + b + c)/2
area = math.sqrt(s*(s-a)*(s-b)*(s-c)) #math.sqrt 开根号
print(" 三角形的边长: ", a, b, c)
print(' 三角形的面积: ', area)
1.3 常量与变量 30

1 .常量

  在程序运行过程中,其值不能改变的数据对象
称为常量( constant )。常量按其值的表示形式区
分它的类型。例如, 0 、 43521 、 -178 是整型常
量, -5.8 、 3.14159 、 1.0 是实型常量(也称作浮点
型常量), "410083" 、 'Python' 是字符串常量。
31
2 .变量的一般概念

  在高级语言中,变量( variable )可以看作是一


个特定的内存存储区,该存储区由一定个数字节的内
存单元组成,并可以通过变量的名字来访问。
  变量具有变量名、变量值和变量地址三个属性。
如: x=5 ,其地址可以通过 id() 函数查看
  变量在它存在期间,在内存中占据一定的存储单
元,以存放变量的值。
32
3 . Python 变量

( 1 )变量的数据类型
   Python 语言是一种动态类型语言,变量的数据类
型是在给变量赋值时确定,对变量的每一次赋值,都
可能改变变量的类型。可以使用内置函数 type() 查询
变量类型。例如:

n=123 n="abc"
print(type(n)) print(type(n))
33
( 2 )变量与地址的关系
   Python 语言采用基于值的内存管理方式,不同的
值分配不同的内存空间。这可理解为, Python 变量并
不是某一个固定内存单元的标识,而是对内存中存储的
某个数据的引用( reference ),这个引用是可以动态
改变的。如:
a=123 a=123
b=123 print(id(a))
print(id(a),id(b)) a=321
print(id(a))
34
4 . Python 标识符

  在 Python 中,标识符表示程序中的各类对象的


名字,由字母、数字和下划线( _ )组成,但不能以
数字开头,标识符中的字母是区分大小写的。例如,
abc 、 a_b_c 、 Student_ID 都是合法的标识
符, sum 、 Sum 、 SUM 代表不同的标识符。
 
错误的标识符: 1ab × a?b ×
正确的标识符: ab1 _x
35
5 . Python 关键字

  所谓关键字( key word ),就是 Python 语言中


事先定义的、具有特定含义的标识符,又称保留字。
关键字不允许另作它用,否则执行时会出现语法错
误。
可以在使用 import 语句导入 keyword 模块后使用
print(keyword.kwlist) 语句查看所有 Python 关键字。

>>> import keyword


>>> print(keyword.kwlist)
1.4 Python 数据类型 38

1.4.1 数值类型

1 .整型数据 (Int)
  整型数据即整数,不带小数点,但可以有正号或
负号。在 Python 中,整型数据的值在计算机内的表
示不是固定长度的,只要内存许可,整数可以扩展到
任意长度,整数的取值范围几乎包括了全部整数(无
限大),这给大数据的计算带来便利。 
39

Python 的整型常量有 4 种表示形式:


( 1 )十进制整数。
( 2 )二进制整数。它以 0b 或 0B 开头,后接数字
0,1 的整数。
( 3 )八进制整数。它是以 0o 或 0O 开头,后接数字
0 ~ 7 的整数。
( 4 )十六进制整数。它是以 0x 或 0X 开头,后接 0
~ 9 和 A ~ F (或 a~f )字符的整数。
40

十进 二进 八进 16 进 十进 二进 八进 16 进
1 0001 1 1 9 1001 11 9
2 0010 2 2 10 1010 12 A
3 0011 3 3 11 1011 13 B
4 0100 4 4 12 1100 14 C
5 0101 5 5 13 1101 15 D
6 0110 6 6 14 1110 16 E
7 0111 7 7 15 1111 17 F
8 1000 10 8 16 10000 20 10
41
2 .浮点型数据 (Float)
浮点型数据表示一个实数,有两种表示形式:
( 1 )十进制小数形式。它由数字和小数点组成,如
3.23 、 34.0 、 0.0 等。浮点型数据允许小数点后面没
有任何数字,如 34. 表示 34.0 。
( 2 )指数形式。指数形式即用科学计数法表示的浮
点数。例如, 45e-5 、 45e-6 、 9.34e2 是合法的浮点
型常量。
42

>>> 9.999 ** 99
9.901483535267289e+98
# 浮点数有效数字 15 个,超出的数字不精确

>>> 0.4 - 0.1


0.30000000000000004
# 实数运算,结果稍有偏差
43

 由于精度的问题,对于实数运算可能会有一定的误
差,应尽量避免在实数之间直接进行相等性测试,而
是应该以二者之差的绝对值是否足够小作为两个实数
是否相等的依据。

>>> 0.4 - 0.1 == 0.3


False
>>> abs(0.4-0.1 - 0.3) < 1e-6
True
44

 3 .复数型数据 (Complex)
  复数类型数据的形式为: a+bj
  其中 a 是复数的实部, b 是复数的虚部, J 表
示 -1 的平方根(虚数单位)。 J 也可以写成小写 j ,
注意不是数学上的 i 。
  可以通过 x.real 和 x.imag 来分别获取复数 x 的
实部和虚部,结果都是浮点型。
45
1.4.2 字符串类型 (String)

1 . Python 标准字符串
  在 Python 中定义一个标准字符串可以使用单引
号、双引号和三引号(单引号或双引号均可),这使
得输入文本更方便。例如,当字符串的内容中包含双
引号时,就可以用单引号定义,反之亦然。
  用单引号或双引号括起来的字符串必须在一行内
表示,这是最常见的表示字符串的方法。而用三引号
括起来的字符串可以是多行的。
46
2 .转义字符
转义字符以反斜杠“ \” 开头,后跟一个或几个字
符。转义字符具有特定的含义,不同于字符原有的意
义,故称转义字符,主要用来表示那些用一般字符不
便于表示的控制代码。例如,“ \n” 表示换行; “ \
t” 是制表符,其作用是使当前输出位置横向跳至下一
个输出区的第一列;“ \’” 表示单引号等。如:
print('It\'s a dog’)
print(r'It\'s a dog’) 自然字符串:在字符串前加 r
47
3 .基本的字符串函数
( 1 ) eval() 函数
   eval() 函数的作用是把字符串的内容作为对应的
Python 语句来执行。其调用格式为:
   eval( 字符串 )
>>> eval('3+45')
48
>>> x=eval(input(‘please input:’))
please input: 1+2+3
48
( 2 ) len() 函数

   len() 函数返回字符串的长度,即字符串中所包
含的字符个数,其调用格式为:

   len( 字符串 )
>>> len('abc de’)
6
49
1.4.3 布尔类型
  在 Python 中,布尔型数据有 True 和 False ,分别
代表逻辑真和逻辑假。值为真或假的表达式称为布尔
表达式, Python 的布尔表达式包括关系运算表达式和
逻辑运算表达式,它们通常用来在程序中表示条件,
条件满足时结果为 True ,不满足时结果为 False 。
  在 Python 中,逻辑值 True 和 False 实际上是分别
用整型值 1 和 0 参与运算。例如:
>>> x=False
>>> x+(5>4)
50
1.4.4 复合数据类型

  列表、元组、字典和集合类型的数据包含多个相
互关联的数据元素,所以称它们为复合数据类型。字
符串其实也是一种复合数据,其元素是单个字符。
  列表、元组和字符串是有顺序的数据元素的集合
体,称作序列( sequence )。序列可以通过各数据元
素在序列中的位置编号(索引)来访问数据元素。字
典和集合属于无顺序的数据集合体,不能通过位置编
号来访问数据元素。
51
1.5 常用系统函数
   Python 的标准库包含很多模块,每个模块中定义
了很多有用的函数,这些函数称为模块函数。例如,
数学库模块( math )提供了很多数学运算函数,复数
模块( cmath )提供了用于复数运算的函数,随机数
模块( random )提供了用来生成随机数的函数,时
间( time )和日历( calendar )模块提供了能处理日
期和时间的函数。
52

在调用模块函数之前,先要使用 import 语句导入


相应的模块,格式如下:
import 模块名
还可以导入模块中指定函数,格式如下:
from 模块名 import 函数名
如果希望导入模块中的所有函数定义,则函数名
用“ *” 替代。格式如下:
from 模块名 import *
53
1.5.1 常用模块函数

1 . math 模块函数
   math 模块主要处理数学相关的运算。

import math
n1=math.sqrt(3)
print(n1)
from math import sqrt
n1=sqrt(3)
print(n1)
54
1.5.2 常用内置函数

   Python 内置函数包含在模块 builtins 中,该模


块在启动 Python 解释器时自动装入内存,而其他
的模块函数都要等使用 import 语句导入时才会装
入内存。内置函数随着 Python 解释器的运行而创
建,在程序中可以随时调用这些函数。前面用到的
print(), type(), id() 等函数都是内置函数。
55
1 . range() 函数
   range() 函数的调用格式是:
   range([start,]end[,step])
   range() 函数产生的数字序列从 start 开始,默认
为 0 ;序列到 end 结束,但不包含 end ;如果指定了
步长 step ,则序列按步长增加,默认为 1 。例如:
>>> range(2) # 默认 start 为 0 , step 为 1
>>> list(range(1, 10, 2))
>>> list(range(9, 0, -2))
56
2 .数值运算函数
abs(x) :返回 x 的绝对值,结果保持 x 的类
型。 x 为复数时返回复数的模。如:
>>> abs(-5)
>>> abs(3+4j)
pow(x,y) :返回 x 的 y 次幂,结果保持 x 或 y
的类型。如:
>>> pow(2,3)
57

round(x[,n]) :用于对浮点数进行四舍五入运
算,返回值为浮点数。它有一个可选的小数位数参数
n 。如果未提供 n ,则返回与 x 最接近的整数。
>>> round(3.14159,3)
>>> round(3.46)
相似的函数有:
ceil(x) ---- 返回数字的上入整数
floor(x) ---- 返回数字的下舍整数
58

类型转换相关函数
type()
int(), float(), str()
hex() 转 16 进制 (hexadecimal)
oct() 转 8 进制 (octal)
chr() Ascii 码转字符 (character)
ord() 字符转 Ascii 码 (order)
59
60
3 . Python 系统的帮助信息
查看 Python 帮助信息可以使用内置函数 dir()
和 help() 。
dir() 函数返回一个列表,其中包含要查询对象
的所有属性和方法。如:
dir(str)
help() 函数查看某个对象的帮助信息。如:
help(str.lower)
1.6 基本运算 61

1.6.1 算术运算

1 .算术运算符与算术表达式
Python 的算术运算符有:
+ (加) - (减) * (乘) / (除)
// (整除,向下取整) % (求余) ** (乘方)
print(7/2) print(7//2) print(-7//2)
62

( 1 ) + 不支持不同类型的对象之间相加或连
接。
>>> x=input()
>>> print(x+4) # 出错
+ 可以用于序列类型(如字符串)的连接。
>>> 'abcd' + '1234'
( 2 ) * 还可用于序列类型与整数的乘法,表示序
列元素的重复,生成新的序列对象。
>>> 'abc' * 3
63

/ 、 // 和 % 运算符都是做除法运算:

“/” 运算符做除法运算,其结果是一个浮点数,即使
被除数和除数都是整型,也返回一个浮点数;

“//” 运算符做整除运算,返回商的整数部分。如果分
子或者分母是浮点型,其结果将会是浮点类型;

“%” 运算符做除法运算后返回余数。
64

“**” 运算符实现乘方运算,其优先级高于乘除运算,
乘除运算优先级高于加减运算。

>>> 3 ** 2
注意:乘方 ** 运算方向:从右至左
>>> 3**2**3 # 等价于 3**(2**3)
65

Python 表达式书写练习:

sin() pi abs()

exp() log() sqrt()


66
1.6.2 关系运算

1 . <, >, <=, >= 运算


   a=3<7
   b=3>3
2 . ==, != 运算
   c=2!=3
   d=12==13
67
1.6.3 逻辑运算

1 . and 运算 两者皆真方为真
   a=(3<7) and (5<8)
2 . or 运算 两者皆假方为假
   b=(3>3) or (2>5)
3 . not 运算
   not(3>4)
1.7 优先级与结合性 68

1.7.1 优先级

所谓优先级,就是当多个运算符同时出现在一个表
达式中时,先执行哪个运算符。
Python 支持几十种运算符,被划分成将近二十个优
先级。
69

运算符说明 Python 运算符 优先级 结合性


小括号 () 19 无
索引运算符 x[i] 或 x[i1: i2 [:i3]] 18 左
属性访问 x.attribute 17 左
乘方 ** 16 左
按位取反 ~ 单目运算符 15 右
符号运算符 + (正号)、 - (负号) 14 右
乘除 * 、 / 、 // 、 % 13 左
加减 +、- 12 左
位移 >> 、 << 11 左
70

运算符说明 Python 运算符 优先级 结合性

按位 & ----> ^ ----> | 10, 9, 8 左


== 、 !
比较运算符 7 左
= 、 > 、 >= 、 < 、 <= 
is 运算符 is 、 is not (同一性测试) 6 左

in 运算符 in 、 not in (成员测试) 5 左

逻辑非 not 4 右

逻辑与 and 3 左

逻辑或 or 2 左
71
如: a+b<2
不好确定优先级的表达式,可以加上括号。如:
(a+b)<2
 不要把一个表达式写得过于复杂,可以尝试把它
拆分来书写。
 不要过多地依赖运算符的优先级来控制表达式的
执行顺序,应尽量使用括号来控制表达式的执行
顺序。
72
1.7.2 结合性

所谓结合性,就是当一个表达式中出现多个优
先级相同的运算符时,先执行哪个运算符:先执行
左边的叫左结合性,先执行右边的叫右结合性。
Python 中大部分运算符都具有左结合性,也就
是从左到右执行;只有单目运算符(例如 not 逻辑
非运算符)、赋值运算符和三目运算符例外,它们
具有右结合性,也就是从右向左执行。如:
a=b=c
73

当一个表达式中出现多个运算符时, Python
会先比较各个运算符的优先级,按照优先级从高到
低的顺序依次执行;当遇到优先级相同的运算符
时,再根据结合性决定先执行哪个运算符:如果是
左结合性就先执行左边的运算符,如果是右结合性
就先执行右边的运算符。
74
1 .列表
  列表( list )是写在中括号之间、用逗号分隔的元
素序列,元素的类型可以不同,可以是数字、字符、字
符串甚至可以包含列表(所谓嵌套)。例如:
mlist=['brenden',45.3,'john',32]
列表中的元素是可以改变的。例如:
a=[1,2,3,4,5,6]
a[0]=9
print(a)
[9,2,3,4,5,6]
75
2 .元组
  元组( tuple )是写在小括号之间、用逗号隔开
的元素序列。元组中的元素类型也可以不同。元组与
列表类似,不同之处在于元组的元素不能修改,相当
于只读列表。例如:
mtuple=('brenden’, 45.3, 'john’, 32)
要注意一些特殊元组的表示方法。空的圆括号表
示空元组。当元组只有一个元素时,必须以逗号结
尾。如 : (2,)
76

任何一组以逗号分隔的对象,当省略标识序列的
括号时,默认为元组。例如:
t1=2,3,4
print(t1[1])
元组与字符串类似,元素不能二次赋值。可以把
字符串看作一种特殊的元组。如:
s1="abc"
print(s1[1])
77
3 .字典
字典( dictionary )是写在大括号之间、用逗号
分隔的元素集合,其元素由关键字( key ,也称作
键)和关键字对应的值( value )组成,通过关键字
来存取的字典中的元素。
78

列表和元组是有序的对象结合,字典是无序的对
象集合。字典是一种映射类型( mapping type ),它
是一个无序的“关键字 : 值”对集合。关键字必须使
用不可变类型,也就是说列表和包含可变类型的元组
不能做索引关键字。在同一个字典中,关键字还必须
互不相同。例如:
dict={'name':‘Tom’, 'code':1001, 'dept':'sales’}
print(dict['code'])
79
4 .集合
集合( Set )是一个无序且包含不重复元素的数
据类型。基本功能是进行成员关系测试和消除重复元
素。可以使用大括号或者 set() 函数创建集合类型,注
意:创建一个空集合必须用 set() 而不是 { } ,因为 { }
是用来创建一个空字典。例如:
student={'Tom', 'Jim', 'Mary', 'Tom', 'Jack'}
print(student)

You might also like