描述
开 本: 16开纸 张: 胶版纸包 装: 平装-胶订是否套装: 否国际标准书号ISBN: 9787302524182丛书名: 高等学校计算机基础教育教材精选
Python程序设计基础第1章概述1
1.1计算机工作原理1
1.1.1计算机起源1
1.1.2二进制数3
1.1.3计算机内部结构4
1.2计算机语言6
1.2.1指令6
1.2.2计算机语言发展史简介6
1.2.3程序设计中的“变量”与“变量值”7
1.3Python语言8
1.4个Python程序9
本章小结10
习题10
第2章数据类型与表达式13
2.1数据类型13
2.1.1数值类型14
2.1.2字符串类型17
2.1.3布尔类型21
2.1.4列表类型22
2.1.5字典类型25
2.1.6元组类型29
2.2访问不同类型的数据31
2.2.1Python语言常用符号31
2.2.2序列的操作36
2.2.3指定函数对序列的操作38
2.2.4字典遍历40Python程序设计基础目录2.3表达式与运算符42
2.3.1算术符号与算术表达式42
2.3.2关系符号与关系表达式43
2.3.3逻辑符号与逻辑表达式43
2.3.4位运算符与位运算43
2.3.5运算符的优先级44
2.4变量赋值与输出45
2.4.1直接赋值45
2.4.2input()输入方式46
2.4.3eval()函数46
2.4.4format()输出方式47
本章小结49
习题49
第3章文件操作51
3.1认识文件51
3.1.1文件名51
3.1.2文件类型52
3.1.3文件位置52
3.2文件的操作53
3.2.1文件的打开与关闭53
3.2.2读取文件54
3.2.3写入文件57
3.3图像文件和网络文件59
3.3.1图像文件的读写59
3.3.2图像文件的处理60
3.3.3网络文件的读写66
本章小结72
习题73
第4章程序结构设计75
4.1程序的基本结构75
4.1.1Python程序结构概述75
4.1.2算法概述76
4.1.3算法的特点76
4.1.4算法的表示77
4.1.5程序的三种基本结构80
4.2程序设计中的表达式83
4.2.1Python语言的关系表达式83
4.2.2Python语言的逻辑表达式83
4.3分支语句84
4.3.1单分支结构: if语句84
4.3.2二分支结构: ifelse语句86
4.3.3多分支结构: ifelifelse语句87
4.4循环控制语句88
4.4.1for语句88
4.4.2while语句91
4.4.3break和continue92
4.4.4程序的异常处理语句94
4.5控制结构综合案例96
本章小结99
习题99
第5章函数设计初步102
5.1函数定义102
5.1.1程序设计函数的起源102
5.1.2函数的定义102
5.1.3匿名函数104
5.2函数的参数传递105
5.2.1按照位置传递参数105
5.2.2按照关键字传递参数105
5.2.3按照默认值传递参数106
5.2.4可变数量的参数传递106
5.3函数的返回值110
5.3.1返回布尔值和列表的函数110
5.3.2无返回值的函数111
5.3.3返回多值的函数112
5.4变量的作用域113
5.5递归115
5.5.1递归的定义115
5.5.2递归实例117
本章小结118
习题119
第6章面向对象的编程方法123
6.1面向对象基础知识123
6.1.1对象与面向对象123
6.1.2类124
6.1.3面向对象的程序设计126
6.2利用turtle库绘制图形131
6.3Python科学计算135
6.3.1NumPy处理数据136
6.3.2Matplotlib绘制图表141
6.3.3SciPy数值计算库147
本章小结156
习题156
第7章综合训练题159
模拟题一161
模拟题二165
附录各章参考答案及解析169
Python程序设计基础Python语言以其“语法简单、句式清晰、高效实现”等特点逐渐成为当今世界流行的编程语言之一。随着我国不断加强人工智能(Artificial Intelligence,AI)发展战略,Python语言已被广泛应用于人工智能产品的研发、行业大数据分析等各个领域。掌握必要的Python语言已成为新世纪人才具备的基础素质之一。本书是Python语言的入门教材,期望能够为初学者打下良好基础,为初学者开启一扇探索Python语言与行业有效结合的大门。本书具有以下特点。
1. 定位准确
本书主要是为非计算机专业学生进行Python程序设计学习而编写的,考虑到这部分学生的程序设计基础比较薄弱,因此,本书的学习目标主要是将程序设计与本专业相结合,通过大量示例讲述程序设计语言中的奥妙。
2. 注重实践
对非计算机专业的学生,在学习了必要的程序设计语法和规则后,更关注的是Python语言的实际应用,因此本书注重介绍使用Python语言编写程序来解决专业中可能遇到的工程问题。
3. 便于自学
本书由浅入深,通过大量的示例讲解,便于学生根据示例的提示,独立完成Python语言程序的编写与调试,有助于培养学生独立解决问题的能力,据此激发学生与本专业知识相结合的创新能力。
本书的篇章结构如下图所示。
本书由北京交通大学计算机学院鲁凌云任主编,诸强任副主编,张英俊、王瑞平两位教师负责了部分章节的编写。同时,也特别感谢北京交通大学熊柯教授、高博副教授、北京服装学院刘正东教授参与书稿的编写并提出宝贵建议。其中,鲁凌云负责编写第1章和第2章,诸强负责编写第3章和第5章,张英俊负责编写第4章,王瑞平、刘正东负责编写第6章。
与本书配套的教学资源,可登录“中国大学MOOC(爱课程)”网站获取,链接如下: https://www.icourse163.org/course/NJTU1003368009由于本书是为非计算机专业学生编写的教材,难易程度是否适合,还需要时间的检验,也欢迎广大读者对本书的各类错误批评指正。
Python程序设计基础前言
编者2019年3月
使用函数可以简化程序结构。复杂的编程问题可以分解成若干简单的子问题,每个子问题用函数来解决。函数像积木块一样通过灵活组合构建起复杂程序。这种简化问题的方法体现了“自顶向下、模块化编程”的程序设计思想。
使用函数可以使程序更容易阅读。函数使程序结构层次分明,好的函数名可以直接体现程序的功能,易于阅读和理解。
使用函数还可以让程序更容易调试和测试。如果程序由一系列的函数组成,程序员可以编写程序调用每个函数,在各种测试条件下测试函数的运行状态。当所有函数都能正常运行时,程序的运行就基本没有问题。当程序运行出错时,也很容易定位到某个函数并找出错误。
5.1.2函数的定义
Python包含内建函数和用户自定义函数。内建函数是Python事先定义好的程序,用户可以直接使用,如pow()、input()、print()等。用户也可以自定义函数,方法如下:def 函数名 (参数1,参数2…):
函数体
return返回值
其中,行是def语句,用关键字def(def是英文define的缩写)定义函数。def与函数名之间有一个空格。函数名通常体现函数功能,且必须符合变量命名的规则。函数名后面圆括号中的参数1、参数2等称为“形式参数”,简称为形参。它的作用是实现调用程序与被调用函数之间的联系。通常把函数要处理的数据、影响函数功能的参数或者函数的运行结果作为形参。形参的个数可以是零个、一个或多个,当参数个数为零时,圆括号也要保留。def语句以冒号结尾,表示后面的函数体与def语句之间有缩进关系(通常是4个空格)。函数体是函数每次被调用时执行的代码。return语句是可选项,它可以在函数体内任何地方出现,表示函数执行到此结束,控制权返回给调用程序,同时返回处理结果。
Python程序设计基础第5章函数设计初步在图51的程序中,第1行定义了一个名称为Sum的函数,形参为a、b、c。第2、3行是函数体,其图51函数定义及调用示例
功能是计算参数a、b、c的和,return语句返回求和结果。第4行print语句与第1行def语句没有缩进关系,因此不属于Sum函数范围,它的功能是调用Sum函数计算10、2、3的和并显示计算结果。在调用函数时,必须给函数传递具体的参数值,此时参数称为“实际参数”,简称实参。10、2、3就是实参。实参可以是常量、变量、表达式、函数等,无论何种类型,在进行函数调用时都必须具有确定的值,才能让函数运行。
该程序的运行结果如下:======RESTART: C:/Python36-32/图5.1程序.py======
S=15
如果将程序中的第4行放到第1行,结果如下:======RESTART: C:/Python36-32/图5.1程序.py======
Traceback (most recent call last):
File “C:/Python36-32/图5.1程序.py”, line 1, in
print(“S=”,Sum(10,2,3))
NameError: name ‘Sum’ is not definedPython
Python提示名字为“Sum”的函数未进行定义。这是因为在调用Sum函数前并没有定义该函数。因此调用函数时必须确保该函数之前已经定义。
再看两个函数定义的例子。
【例51】定义一个函数,将华氏温度转换为摄氏温度。def fTemp (t):
converTemp=(5/9) (t-32)
return converTemp
函数的参数是华氏温度,返回其对应的摄氏温度,例如:>>>fahTemp=eval(input(“请输入华氏温度: “))
70
>>>celTemp=int(fTemp(fahTemp))
>>>print(“转换后的摄氏温度是: “, celTemp, “度”)
转换后的摄氏温度是: 21 度
代码中的int()函数将摄氏温度浮点数转换为整数。
【例52】定义一个函数,提取中文姓名中的姓氏和名字。假设姓氏与名字之间有一个空格。def getName(name):
nameList=name.split()
giveName=nameList[0]
firstName=nameList[-1]
return giveName,firstName
该函数的参数是一个姓名字符串,姓氏与名字之间有一个空格。函数中name.split()的功能是将字符串name按照空格分成不同元素保存到一个列表中,在本例中,列表有两个元素: 姓氏和名字。函数返回姓氏和名字两个结果,在调用函数时应定义两个变量分别保存它们:>>>Name=input(“请输入姓名,姓氏和名字之间以一个空格分开: “)
请输入姓名,姓氏和名字之间以一个空格分开: 诸葛亮
>>>givename, firstname=getName(Name)
>>>print(“姓氏: “, givename, “名字: “, firstname)
姓氏: 诸葛 名字: 亮
5.1.3匿名函数
函数定义中有一类特殊函数,称为匿名函数或lambda函数。它使用lambda关键字,一般形式如下:f=lambda参数1, 参数2, …: 表达式
这种函数省略了def声明函数的标准步骤,因此被称为匿名函数。其本质是一个表达式,能接收任何数量的参数并返回表达式的值。例如:>>>f=lambda x, y, z: x y z
>>>f (1,2,3)
6
>>>g=lambda x: lambda y: x y
>>>a=g(4)
>>>a(10)
14
>>>g(4)(10)
14
代码中g返回的是一个lambda函数lambda y: x y。当x=4时,a=g(4)=lambda y:4 y。当y=10时,a(10)=4 10=14。两个表达式也可以简化为g(4)(10)。
5.2函数的参数传递
函数有三种方法将实参传递给形参,即按照位置传递参数、按照关键字传递参数、按照默认值传递参数。
5.2.1按照位置传递参数
函数调用时默认采用该方法传递参数,其形式如下:函数名 (参数1,参数2,…)
这种参数传递方法要求形参和实参的个数必须一致,并且一一对应,即相同位置的实参向相同位置的形参传递参数。当实参是一个表达式时,先要计算表达式的值,再将它传递给形参。例如图51的程序中print函数在调用Sum函数时就是按照位置传递参数:Sum (10,2,3)
这里a=10,b=2,c=3。
5.2.2按照关键字传递参数
当函数需要传递很多参数时,按照位置传递参数很容易出错,此时可以按照关键字传递实参,其形式如下:函数名 (参数名1=值1,参数名2=值2,…)
这种参数传递方法在实参前添加了参数名,即关键字。关键字明确了每个参数的含义,这样即便参数顺序被打乱,参数的位置发生改变,也不会影响参数的传递。例如图51的程序如果需要对10个值求和,可以采用关键字传递实参。同时,关键字参数可以在函数中提供默认值。Sum (a=10, b=2, c=3, d=…)
5.2.3按照默认值传递参数
在定义函数时可以给形参指定默认值。在调用函数时如果形参提供了数值,则使用给定的参数值,如果没有提供数值,则会使用默认值。例如图51中的程序,如果函数定义如下:def Sum (a,b,c=2)
result=a b c
return result
此时Sum函数有三个形参a、b和c,其中c指定了默认值3。如果调用函数如下:>>>print (“S=”, Sum (10,2,3))
S=15
结果为15。因为调用函数时形参c提供了参数3,c等于3,而不是默认值2,求和结果是10 2 3=15。如果调用函数如下:>>>print(“S=”, Sum(10,2))
S=14
结果为14。因为此时实参10、2按照位置顺序分别传递给形参a、b,而c没有提供实参,因此其值等于默认值2,求和结果是10 2 2=14。要注意的是,如果函数定义时给某个形参指定了默认值,则该参数必须定义在无默认值的形参后面,因此c要定义在a、b之后。
5.2.4可变数量的参数传递
某些情况下,在定义函数时无法确定参数个数,Python允许函数设计可变数量的参数。此时函数定义形式如下:函数名 (参数)
在参数名前面加一个“”,表示参数是以形参名为标识符的元组,元组中的元素个数可以是零个、一个或多个。例如,定义函数:def f(a):
print(a)
调用这个函数:>>>f(“Hello”)
(‘Hello’,)
结果表明参数a是一个以字符串“Hello”为元素的元组。又如下例:>>>f(1,2,3)
(1, 2, 3)
返回结果是一个包含三个参数1、2、3的元组。如果不提供任何参数:>>>f ()
()
则返回一个空元组。如果按照关键字传递参数,例如:>>>f(a=1)
Traceback (most recent call last):
File “”, line 1, in
f(a=1)
TypeError: f() got an unexpected keyword argument ‘a’
结果提示出错。此时应采用如下方式定义函数:函数名 (参数)
在参数名前加“”,表示参数的数据类型是字典,其中关键字(参数名)为“键”,参数值为“值”。例如:def f(a):
print(a)
此时再按关键字传递参数:>>>f (x=1, y=2, z=3)
{‘x’: 1, ‘y’: 2, ‘c’: 3}
返回结果是一个字典参数,其中每个元素以关键字(参数名)为键、参数值为值。
综上所述,按照位置和按照关键字传递参数时,参数数量是固定不变的。如果参数数量不定或可变,需要在参数名前加“”或“”。加“”表示参数是元组参数,加“”表示参数是字典参数(键值对)。在定义函数时,可以混合使用多种参数传递方式,此时要遵循以下规则:
(1) 关键字参数应放在位置参数后面。
(2) 元组参数必须在关键字参数后面。
(3) 字典参数要放在元组参数后面。
在调用函数时,首先按位置顺序传递参数,其次按关键字传递参数。多余的非关键字参数传递给元组,多余的关键字参数传递给字典。
【例53】下列函数采用字典参数,观察函数调用结果。def story(info):
print(‘人生苦短,{name}爱{language}’.format(info))
调用函数,结果如下:>>>story(name=’Gudio’, language=’Python’)
人生苦短,Gudio爱Python
>>>story(name=’James’, language=’Java’)
人生苦短,James爱Java
>>>params={‘name’:’Dennis’,’language’:’C’}
>>>story(params))
人生苦短,Dennis 爱C
>>>del params[‘name’]
>>>story(name=’stroke of genius’,params)
人生苦短,stroke of genius爱C
【例54】函数定义如下:def power (a, b, c):
if c:
print(‘接收多余的参数: ‘,c)
return ab
调用函数,进一步理解元组参数的传递方法:>>>power(2, 3)
8
>>>power(3, 2)
9
>>>power(b=3, a=2)
8
>>>arg1=(5, )2
>>>power(arg1)
3125
>>>arg2=(5,6)2
>>>power(arg2)
接收多余的参数: (5, 6)
15625
>>>power(3,3,’Hello,world’)
接收多余的参数: (‘Hello, world’,)
27
函数power定义了三个形参,其中a和b是普通参数,c是元组参数。if c语句判断是否存在参数c,存在的话给出提示并计算ab,否则直接计算ab。代码中arg1=(5,)2=(5,5),是一个元组。元组中的元素按照位置顺序赋值给形参,因此power(arg)等价于power(5,5),没有参数c,直接计算55,返回3125。arg2=(5,6)2=(5,6,5,6),power(arg2)等价于power(5,6,5,6),这时参数a=5,b=6,剩余的参数5和6组成元组传递给c。因为参数c存在,所以会去执行if后面的语句,提示接收多余的参数c,即(5,6),同时计算56=15625。同样,power(3,3,’Hello,world’)中参数a和b按顺序赋值为3和3,第三个参数“Hello,world”传递给c,也会执行if后面的语句,此时c=(‘Hello,world’,)。
【例55】按默认值传递参数,函数定义如下:def f (x, y=None, z=1):
if y is None:
x, y=0, x
result=[]
i=x
while iresult. append(i)
i =z
return result
调用函数,结果如下:>>>f(10)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>>f(1,5)
[1, 2, 3, 4]
>>>f(1,10,2)
[1,3, 5,7, 9]
>>>power(f(3,7))
接收多余的参数: (5, 6)
81
其中函数power的参数是f(3,7),因为f(3,7)返回一个列表[3,4,5,6],函数调用等价于power(3,4,5,6),根据power函数定义,a=3,b=4、5和6组成元组传递给c,后返回参数提示和34的结果81。
5.3函数的返回值〖1〗5.3.1返回布尔值和列表的函数在函数定义中,return语句是可选项,主要功能是返回函数运行结果。返回的数据类型除常见的数值、字符串外,还可以是布尔值或列表等。
【例56】下面程序判断用户输入的英文单词首字母是否是大写字母,并给出提示。def isBigLetter(word):
if ord(‘A’)<=ord(word[0])<=ord(‘Z’):
return True
return False
str=input(‘请输入一个英文单词: ‘)
if isBigLetter(str):
print(‘单词首字母是大写字母!’)
else:
print(‘单词首字母不是大写字母!’)
其中函数isBigLetter用来判断单词首字母是否为大写字母,return语句返回一个布尔值,如果是大写字母返回True,否则返回False。函数中word[0]表示字符串word中的个字符,也就是单词首字母。ord(x)是Python内置函数,用于将字符串x转换为其所对应的Unicode编码。因为大写字母A~Z在计算机中用编码65~90表示,如果字符编码在这个范围,就表示该字符是大写字母。
请注意,函数中出现了两个return语句。如果if语句条件成立,会去执行“return True”语句,然后函数结束运行,返回调用程序,不再执行“return False”语句。如果if语句条件不成立,会执行“return False”语句,再返回调用程序。当函数中有多条return语句时,执行完条return语句就会退出函数,不再执行其他return语句。
程序运行结果如下:=======RESTART: C:/Python36-32/例5.6.py=======
请输入一个英文单词: Python
单词首字母是大写字母!
>>>
=======RESTART: C:/Python36-32/例5.6.py=======
请输入一个英文单词: python
单词首字母不是大写字母!
return还可以返回列表。例如,如果要求显示用户输入的英文单词中包含的元音字母,可以用下面的程序:
【例57】显示英文单词中的元音字母。def find_Vowels(word):
word=word.lower()
vow=(‘a’,’e’,’i’,’o’,’u’)
findVowels=[]
for i in vow:
if (i in word) and (i not in findVowels):
findVowels.append(i)
return findVowels
str=input(“请输入一个单词: “)
vowelsinStr=find_Vowels(str)
print(vowelsinStr)
为方便处理,函数find_Vowels首先使用str.lower()方法将单词的所有字母转换为小写,再依次判断5个元音字母(a,e,i,o,u)是否包含在单词中。如果包含在单词中,就将其添加到列表findVowels中,后返回这个列表。调用函数时需要定义一个变量保存列表,程序运行结果如下:=======RESTART: C:/Python36-32/例57.py=======
请输入一个单词: Gudio
[‘i’, ‘o’, ‘u’]
5.3.2无返回值的函数
函数中如果没有return语句,会自动返回None,表示没有返回值。它的数据类型是NoneType。例如:def f(x,y):
s=x y
调用这个函数:>>>result=f(2, 3)
>>>print(result)
None
>>>type(result)
如果函数有return语句,但没有任何参数,则运行结果与上例相同。例如:
评论
还没有评论。