APP下载

在线评测系统在高职“Python程序设计”课程教学中的应用

2019-01-06沈涵飞

无线互联科技 2019年21期
关键词:计算思维任务驱动

沈涵飞

摘   要:为提高“Python程序设计”课程的教学质量,文章构建了基于程序在线评测系统的练习平台,并针对课程特点和高职学生设计了多层次的题库,文章提出了“任务驱动,知识配套”的理念,将评价的重点放在了学生运用Python语言解决问题的能力上。实践表明,在线评测系统的使用有效提高了“Python程序设计”课程的教学质量。

关键词:Python教学;在线评测系统;速查表;计算思维;任务驱动

Python由吉多·范罗苏姆(Guido van Rossum)于1989年年底发明,目前已经应用到很多领域,被诸多高校选定为学生的程序设计入门语言。相较于Java,PHP,C++这些传统语言,Python显得更加简洁、易读、可扩展,它的这3个优势让其在开发者中大受欢迎并成为人工智能和大数据领域的首选编程语言。“Python程序设计”课程的实践性很强,以语言语法描述为主线的传统教学方式使教学重点自觉或不自觉地偏向理论,降低了对学生实践能力的培养和考核,无法充分锻炼和提高学生的程序设计能力,不利于学生的专业技能发展。

1    课程教学方式的变化

高职学生的培养目标是将其培养为应用型人才。应用型人才的核心能力是工程实践能力,是一种综合能力[1]。计算机类学生工程实践能力的基础和核心在于学生的编程、计算思维、算法、创新等基本程序设计能力[2]。

“Python程序设计”课程的主要目标就是培养学生编写程序、解决问题的能力。问题求解能力是在不断解决问题的过程中逐步提高和强化的,因此需要有一个练习平台能够支撑学生来完成足够多的练习。

课程教学需要合理设计练习内容,以任务驱动为中心,语言知识围绕任务逐步引入,让学生在做中学、学中做,将知识学习和应用实践充分结合,通过实践来提升培养工程实践能力。

从Python语言和学生的特点出发,确定的新的教学方式以程序设计为主线,在完成任务的过程中,深化对Python的理解,这种教学方式的实施离不开练习平台的支撑。实践表明,将最初用于高水平程序设计竞赛的在线评测系统应用到“Python程序设计”课程,是一种可行并有效的方式。

2    程序在线评测系统在教学中的应用

最初开始“Python程序设计”教学时,课程的实践教学环节停留在学生编写程序代码、撰写纸质实验报告,再由教师批改这一过程。这种方式存在几个问题:(1)教师需要花大量的时间和精力来批改作业。(2)学生获得反馈的周期较长,导致学习兴趣逐渐减退。(3)学生看不到同伴的完成状况,无法激发学生之间的竞争意识。把程序在线评测系统引入“Python程序设计”的教学可以有效地解决这些问题。

2.1  程序在线评测系统的介绍

程序在线评测系统(Online Judge,OJ)是基于Web的服務器端判题系统,其主要功能包括题库管理、在线提交、实时评测、网上考试、系统监控等。用户注册后,可以根据题目在线提交多种编程语言(C,C++,Python等)源代码,系统编译源代码后执行,采用黑盒测试的方式,通过和预设测试数据的比对来检验源代码的正确性。

程序在线评测系统最先应用于ACM-ICPC国际大学生程序设计竞赛和信息学奥林匹克竞赛的自动判题和训练中,现已逐步应用于高水平本科院校高级语言程序设计、数据结构与算法分析等课程的实践教学中,并取得了较好的效果[3]。

在实践过程中,系统采用的是HUST Online Judge System,是由华中科技大学毕业生王良晶等开发并在2008年年底以GPL协议开源的在线评测系统[4],该系统基于PHP和MySQL开发,运行在Linux平台。以此系统为基础,本研究做了简单的改进,搭建了Python程序自动评测系统,网址为http://oj.csoeasycom/。

2.2  程序在线评测系统的题库设计

高水平程序设计竞赛和高职“Python程序设计”的教学目的和对象存在很大差别。“Python程序设计”课程的要求是让学生熟练掌握Python的核心数据结构来解决常见任务,对算法和数据结构的掌握没有太多要求,这就需要针对课程和学生特点进行改进。采取了下列措施使评测系统能更好地服务于课程的教学:(1)大幅度增加了基础题目的比重,让学生能够花较少的时间完成大多数练习,增强学生的信心。(2)创建套题,增强题目之间的关联性、循序渐进,给学生提供更多的台阶。(3)充分利用Web的特点,在题目中尽可能配图,增强系统的亲和力,让学生乐于使用。(4)在难度较大的题目中给出提示、线索、部分代码等,降低学生完成的难度,减少学生的挫败感。

2.3  使用速查表提高学习效率

为配合在线评测系统在Python课程中的使用,克服学生的畏难情绪,让学生聚焦于任务解决,提高学生处理任务的效率,课程组给学生设计了速查表(Cheat Sheet)。速查表内容简洁,能根据学生的反馈及时调整,快速响应学生的需求。

速查表的内容凝聚了Python语言的核心知识点和最常用代码,选学内容只提供线索,鼓励学生在需要的时候,依据线索在互联网上查找,有助于培养学生的自主学习能力。

提交到在线评测系统的程序可以划分成输入、处理和输出3部分。在速查表中,对常用的声明、输入、输出归纳成形成表格供学生参考,这样可以避免学生在这些部分出现错误,有利于学生将精力集中在任务的核心部分—数据计算。

在处理评测系统的多个输入时,需要用到列表生成式,这对刚接触Python的学生存在一定困难。由于评测系统的输入模式相对固定,通过归纳,常用输入方式如表1所示。

评测系统对于输出格式也有严格的要求,初学者常会困惑遇到“格式错误”的问题,所以也提供了输出模板给学生参考,如表2所示。

速查表还将实验题目中最常用到的代码设计成模块,学生可以运用这些模块来解决较复杂的问题,这也有助于学生体会结构化程序设计的核心—函数和模块划分。

2.4  教学内容和顺序的调整

新的教学模式调整了传统的教学内容和顺序,以实践课为主,重点放在思路分析。学生只需理解和掌握速查表中的核心内容,知识点够用就行,更多的是鼓励学生运用Python解决任务,培养计算思维。

在学生的Python编程和计算思维能力得到了有效的提升后,再逐步引入Python的更多语法和细节,介绍了同一任务的不同解决方式。由于学生的感性知识有了足够的积累,其接受理论知识的速度也大大提高。

3    Python和C语言的不同

在线评测系统中最常用的程序设计语言是C语言和C++语言。C语言诞生于20世纪70年代初,设计的基本原则是让机器能更快运行,缺乏抽象层次较高的数据类型。Python的设计的主要目的是提高程序员的开发效率,运行速度并不是首要考虑,提供了字符串、列表、字典等功能强大的数据类型。因此,Python在处理任务时,编写的代码相对于C语言更为简洁。下面以内置函数、字符串、字典、匿名函数lambda等几个方面展示Python处理任务的特色。

3.1  内置函数和标准库函数

示例:阶乘求和。求Sn=1!+2!+3!+4!+5!+…+n!之值,其中,n是一个数字,样例输入:5,样例输出:153。

在C语言中,求阶乘很容易溢出。在Python3中,只要内存能容纳,不存在整数溢出的问题,整数也是对象。标准库math提供了计算阶乘的函数,内置函数sum能直接求和,大大简化了计算过程。

import math

n = int(input())

print(sum([math.factorial(i) for i in range(1, n+1)]))

3.2  字符串

示例:在屏幕上输出100行“good good study,day day up”。

在C语言中,通常使用循环来实现输出。而在Python中,则利用字符串的“*”号运算,避免循环。

print(‘good good study,day day up\n*100)

示例:输入10个数字,然后逆序输出。输入:十个整数;输出:逆序输出,空格分开。注意:最后一个数字后面是没有空格的,如果在最后一个数字后面输出了空格,会导致“格式错误”。

使用字符串的join方法,能很容易的把列表的内容连接成字符串。

L = input().split()

print( '   '.join(L[::-1]))

3.3  字典

示例:數字转换成星期。输入一个数字(1~7),输出对应的星期,输入其他的数字,输出Error。

例如:输入1,输出Monday;输入2,输出Tuesday;输入8,输出“Error”。

在C语言中,通常采用分支语句来处理。在Python中,利用字典来解决,更为简洁和优雅。

d = {‘1: ‘Monday,  ‘2: ‘Tuesday,  ‘3: ‘Wednesday,  ‘4: ‘Thursday,

‘5: ‘Friday,   ‘6: ‘Saturday,  ‘7: ‘Sunday}

s = input()

if s in d:

print(d[s])

else:

print(‘Error)

3.4  匿名函数lambda

示例:从两个字符串中输出较长的字符串。比较两个字符串的长度,将其中长度较长的字符串输出。如果两个字符串的长度相同,则输出第1个字符串。输入:两个字符串。输出:长度较长的字符串。

Python提供了内置函数max,该函数是高阶函数,可以接Lambda函数来简洁的处理任务。

s1 = input()

s2 = input()

print(max(s1, s2, key=len))

4    成效分析

采用基于程序在线评测系统的练习平台后,Python课程教学获得了以下成效:(1)学生提交作业后,获得及时反馈,有利于提高学生的积极性。(2)学生能实时看到同伴的完成状况,营造了你追我赶的良好氛围。(3)学生不再受时间和地点的约束,通过互联网就能访问,有利于自主学习。(4)教师从传统的向学生传授知识转变为协助学生解决任务。(5)有利于教师提前发现对Python学习充满热情的学生,对其进行了针对性的培养,并鼓励成为教学小助手;

基于在线评测系统的练习平台除了用于“Python程序设计”的教学外,还用于竞赛的培训,两者实现了无缝衔接。在2019年全国职业院校技能大赛高职组“大数据技术与应用”赛项中,学生柳宇阳、居吉、赵天豪组成的团队以第4名的成绩荣获全国一等奖。

5    结语

本文简要分析了高职“Python程序设计”课程的现状,提出了“任务驱动、知识配套”的理念,并以开源的在线评测系统HustOJ为基础构建了练习平台,鼓励学生应用速查表来解决任务,将评价的重点放在了学生运用Python处理任务的能力上。这些措施突出了课程的重点,降低了学习过程中的障碍,激发了学生的好胜心和学习热情,培养了学生的计算思维。在采取了新的教学方式后,教学质量有了大幅度的提高,并在全国职业院校技能大赛中取得了优异的成绩。

[參考文献]

[1]蒋宗礼.本科工程教育:聚焦学生解决复杂工程问题能力的培养[J].中国大学教学,2016(11):27-30,84.

[2]蒋宗礼.计算机类专业人才专业能力构成与培养[J].中国大学教学,2011(10):11-14.

[3]林巧,韩建民.基于在线评测系统的C语言实践教学探讨[J].实验科学与技术,2011(9):37-39

[4]张浩斌.基于开放式云平台的开源在线评测系统设计与实现[J].计算机科学,2012(39):339-343.

Application of online judge system in “Python Programming”

course in higher vocational colleges

Shen Hanfei

(Suzhou Industrial Park Institute of Services Outsourcing, Suzhou 215123, China)

Abstract:In order to improve the teaching quality of “Python Programming” course, this paper constructs an online judge system. A multi-level question bank is designed according to the course characteristics and higher vocational students. The concept of “task-driven, knowledge matching” is proposed in this paper, the evaluation focuses on students ability to solve problems using Python, practice shows that the online judge system has effectively improved the teaching quality of “Python Programming” course.

Key words:Python programming teaching; online judge system; cheat sheet; computational thinking; task driven

猜你喜欢

计算思维任务驱动
基于计算思维的软件类研究生高级算法课程教学研究
基于计算思维程序设计的军事案例研究
程序设计课程中计算思维和应用能力培养问题研究
浅谈任务驱动教学法在计算机教学中的运用
任务驱动, 启发学生自学