刘卫国+奎晓燕
摘 要:分析Python语言的特点,提出Python语言程序设计课程教学的两个层次,针对不同层次提出相应的教学目标;针对计算机公共课程的教学要求,结合本科人才培养方案,从教学内容、实践环节、学时安排等方面阐述Python语言程序设计课程的教学实施。
关键词: Python语言;程序设计;教学体系
0 引 言
计算机程序设计基础是高等学校计算机基础教学的核心课程[1],它以一种高级语言作为程序实现工具,介绍程序设计的基本思想和方法,既可为后续相关计算机课程学习奠定基础,也有助于学生更加深刻地理解计算机求解问题的方式,因而计算机程序设计课程也是计算思维能力培养的重要载体,是对学生进行计算思维能力培养最直接、最具操作性的课程。
传统的高级语言(如C语言)往往为了兼顾性能而采用较为复杂灵活的语法规则,所以需要掌握的细节多,即使实现最简单的功能,也要涉及很多概念,其他许多高级语言亦是如此,这就制约了计算机作为一种普适工具在各学科专业中的深入应用。Python语言是一种功能强大的程序设计语言,以优雅、清晰、简洁的语法特点,能将初学者从语法细节中摆脱出来,而专注于解决问题的方法、分析程序本身的逻辑和算法[2]。Python语言还具有大量优秀的第三方函数模块,对学科交叉应用很有帮助。经过20多年的发展,Python语言已经成为一门重要的程序设计语言。目前,基于Python语言的相关技术正在飞速发展,国内外许多高校也陆续开设了Python语言程序设计课程[3]。
1 Python语言程序设计教学总体思路
1.1 Python语言的优势
人们学习程序设计往往是从学习一种高级语言开始的,因为语言是描述程序的工具,熟悉一种高级语言是程序设计的基础。关于高级语言有很多,任何一种语言有其自身诞生的背景,从而决定了其特点和擅长的应用领域。例如,FORTRAN语言诞生于计算发展应用的早期,适合做科学计算;C语言是为描述和实现UNIX操作系统而设计,广泛应用于系统软件、嵌入式软件的开发。Python作为一种通用的程序设计语言,具有和其他语言相同的基本特征,也有其自身的特点,给人印象较深的有3点。
(1)开放性。其开放特性使得很多开放语言社区对用户提供快速的技术支持,学习和使用Python技术不再是孤军奋战。如今,各种社区提供了成千上万个不同功能的开源函数模块(截至本文投稿时接近11万个),而且还在不断地发展,这为基于Python语言的快速开发提供了强大支持,由此形成了良好的计算生态[4],构成了Python语言的强大优势。
(2)优雅的语法。Python语言吸收了现代程序设计语言的很多特点,采取了优雅、细致的语言设计。例如,Python程序没有太多的细节规则要求,“信手拈来”就可以组成一个程序;使用语句“a,b=b,a”可以实现无需中间变量交换两个变量的值;列表可以很方便地实现批量数据的处理,如列表的sort方法或sorted()内置函数可以实现数据排序等。
(3)可读性强。Python语言通过程序缩进来确定语句块的起止范围(C语言用一对大括号构成复合语句,其他语言采用控制结构配套的结束语句),既是语法要求,又保证了程序的可读性,有利于培养学生良好的程序设计习惯。
1.2 Python语言程序设计的教学层次及其教学目标
通过前面对Python语言特点的分析,可以把Python语言程序设计的内容体系归结为两部分,即Python基础和Python生态圈,如图1所示。其中Python基础就是一般意义上讲的程序设计,这时Python程序设计面临的问题和其他语言一样,即要突出程序设计方法,讲清从问题到算法再到程序的思维过程,帮助学生构建问题求解的方法。Python生态圈是指Python第三函数库的应用,这是突显Python优势的地方。如果没有Python生态圈的支撑, Python程序设计和其他语言程序设计没有本质区别。
Python的内容体系衍生出Python语言程序设计教学的两种不同层次,一是计算机公共课,即计算机程序设计基础,一般是在大学计算机课程之后开设,作为非信息类专业的入门程序设计课程;二是专业应用课程,一般是在学习了某种程序设计语言之后开设,可以针对任何专业开设。
这两种层次教学的教学目标是不同的,作为计算机公共课,Python包括基本语言知识和基本算法的教学(Python基础)以及第三方函数库的应用(Python生态圈),这时Python基础是重点,Python生态圈的应用是方向性、示范性的,如图2所示。图中Python基础和Python生态圈的内容有交叉,但前者是重点(影印部分)。课程内容应适当突出基础算法(程序设计课程教学目标使然),以排序问题为例,除介绍列表的sort方法或sorted()内置函数外,还要介绍基本的排序算法:选择排序、冒泡排序、插入排序等。而Python生态圈的应用除一些公共性模块外(如绘图模块),还应结合专业特点进行教学,如工程类专业介绍科学计算模块库,语言类专业介绍自然语言处理模块库。
Python作为专业应用课程时,不需要从基本的算法逻辑开始,重在第三方库的应用,介绍利用Python解决学科领域问题的途径和方法,如图3所示。图中Python基础和Python生态圈的内容有交叉,但后者是重点(影印部分)。即便学生没有用过Python语言,也能通过自学、微视频、MOOC等方式很快地熟悉,因为他们已学过一门程序设计语言,应该有这种能力(教学实践看,大部分学生的学习能力是不可低估的)。
2 Python语言程序设计教学实施方案
Python語言程序设计教学包括计算机程序设计基础(Python)、计算机程序设计实践(Python)两门课程,前者48学时(理论学时32、实验学时16)、3学分,后者16学时、1学分,开课时间是一年二期。
2.1 计算机程序设计基础(Python)课程教学内容组织
课程以Python语言作为程序实现工具,以实际问题的求解过程为向导,突出“问题—算法—程序”的一种思维过程,强调计算机求解问题的思路引导与程序设计思维方式的训练,重点放在程序设计的思想与方法上。
2.1.1 课程理论教学内容
该课程理论教学的主要内容如图4所示。
各部分的具体内容如下:
(1)基本数据类型。涉及Python各种数据对象的表示方法、常用模块函数、基本运算与表达式等内容。
(2)程序流程控制。涉及顺序、选择、循环3种控制结构。顺序结构包括赋值语句、数据输入输出等内容,选择结构包括条件的描述、选择结构的实现、条件运算等内容,循环结构包括while循环结构、for循环结构、循环控制语句、循环的嵌套等内容。
(3)复合数据类型。涉及字符串处理、列表与元组的应用、字典与集合的应用。字符串处理包括字符串编码、字符串的索引与分片、字符串的操作等内容。列表与元组包括序列的通用操作、列表的专有操作、元组与列表的区别及转换等内容。字典与集合包括字典、集合的操作等内容。
(4)函数与模块。涉及函数的定义与调用、函数的参数传递、函数的嵌套调用与递归调用、变量的作用域、匿名函数、Python模块等内容。
(5)文件操作。涉及文件的打开与关闭、文本文件的操作、二进制文件的操作、文件处理等内容。
(6)图形绘制。涉及Tkinter图形库、画布、图形的绘制、图形的事件处理、图形处理应用等内容。
(7)图形用户界面。涉及常见控件的用法、对象的布局方式、对话框、图形用户界面应用等内容。
(8)第三方函数库的应用。涉及Python在专业领域的学科应用,结合专业特点介绍不同的第三方函数库。
2.1.2 课程实验设置
本课程实验含3 种实验类型:验证性实验、综合性实验和设计性实验。共安排8个实验,每个实验安排2 小时课内机时和适当的课外机时。通过实验教学,学生能够加深对理论知识的理解,掌握常用算法及其实现方法,得到程序设计方法的基本训练。课程的实验内容如下:
(1)顺序结构实验。Python程序的运行环境、Python的基本数据类型、Python的算术运算规则及表达式的书写方法、赋值语句的基本格式及执行规则、输入输出语句的基本格式及执行规则、顺序结构程序的设计方法。
(2)选择结构实验。Python中表示条件的方法、if语句的格式及执行规则、选择结构程序设计的方法。
(3)循环结构实验。while语句的基本格式及执行规则、for语句的基本格式及执行规则、多重循环的使用方法、循环结构程序设计的方法。
(4)字符串处理实验。字符串的索引与分片、字符串的操作方法。
(5)列表、元组、字典和集合实验。概念及操作方法。
(6)函数实验。函数定义与调用、匿名函数的定义与使用方法。
(7)文件操作实验。文件的基本概念及操作方法。
(8)图形处理操作实验。画布绘图的方法、turtle绘图方法。
2.2 计算机程序设计实践(Python)课程教学内容组织
课程是在学生修完计算机程序设计基础(Python)之后的一门实践性课程,要求学生完成一个具有一定规模的程序设计任务。通过本课程的学习,学生具备利用程序设计技术综合解决实际问题的能力。通过分析问题、设计算法、编写和调试程序,学生得到利用计算机进行问题求解的基本训练,提高综合应用能力。该课程的基本要求是,学生能独立完成问题分析、程序设计、编写和调试任务,能根据设计任务的需要进行有关知识的学习和资料查找,撰写实践报告。
典型的设计任务包括绘制各种分形曲线、特殊图形、游戏程序、图形用户界面设计、科学计算问题(如求线性方程组)、自然语言处理等。具体要求是:根据问题建立数学模型,设计算法,进行程序设计、调试,并对结果进行分析评价。在问题求解方式上,有基本的算法、Python标准库求解、第三方库代码复用等,其中重点应该是第三方库的使用。例如,矩阵运算的NumPy模块,科学计算的SciPy模块,数据可视化的Matplotlib模块等。
由于是一年二期开课,受学生先前知识的影响,有些应用还难以开展,如网络爬虫、数据挖掘等。
3 推介课程,将Python列入本科人才培养方案
计算机基础教学具有工具性、应用性、普适性等特征。我们认为,针对非信息类专业的程序设计课程,选择Python作为描述语言更能体现计算机基础教学的特征。基于这些认识, 我们将Python程序设计课程列入了中南大学2016版本科人才培养方案。2016年,学校对公共基础课程和学科基础课进行了改革,由本科生院与二级教学单位联合确定课程种类、学时及适用学科专业类型,供二级学院制定人才培养方案时使用,最后确定了“1+2+x”信息技术类系列课程,如图5所示。
在计算机程序设计基础课程中,我们将Python语言列入其中,由各办学专业根据专业需要自行决定语言类型。刚开始时没有一个专业选择该语言,究其原因应该是专业老师不了解。后来通过学校组织研讨会、审定培养方案(各专业制定培养方案后需要各个系列课程团队审核)、走访专业责任教授等方式,我们介绍课程特点,强调Python在学科应用中的优势,最终有物流工程、工程管理、英语等专业将Python程序设计列入了培养方案。
和以前制定培养方案相比,这次是由本科生院组织提出系列课程菜单,再由各专业自行决定课程,这也体现了计算机基础教育为专业人才培养目标服务的“服务性”特征。我们的体会是,基础课教学团队一定要提出自己的思路和构想,实现主动服务,只要真正能在专业人才培养中发挥作用,对提高学生的计算机应用能力有帮助,专业老师还是欢迎的,但得到认可可能需要一点时间。
4 结 语
Python语言程序设计教学体系的建设既有一般高级语言程序设计教学体系的共性,又有其自身的特点。如何遵循共性,发挥特点,还需要结合人才培养的目标要求和教学对象的特点不断进行教学实践。不管采用教学体系方案如何,培养学生的计算机应用能力的目标是共同的。比较理想的境界是,Python基础和Python生态圈融合应用,使学生既能掌握基本的程序设计方法和技能,又能合理选择问题求解的方式,提高解决问题的效率和水平。
参考文献:
[1] 教育部高等学校计算机基础课程教学指导委员会. 高等学校计算机基础核心课程教学实施方案[M]. 北京: 高等教育出版社, 2011.
[2] 刘卫国. Python语言程序设计[M]. 北京: 电子工业出版社, 2016.
[3] 嵩天, 黄天羽, 礼欣. Python语言: 程序設计课程教学改革的理想选择[J]. 中国大学教学, 2016(2): 42-47.
[4] 嵩天, 礼欣, 黄天羽. Python语言程序设计基础[M]. 2版. 北京: 高等教育出版社, 2017.
(编辑:彭远红)