论文部分内容阅读
《普通高中信息技术课程标准(2017年版)》(以下简称《标准》)要求普通高中信息技术课程内容要紧扣数据、算法、信息系统和信息社会等学科大概念,培养学生信息意识、计算思维、数字化学习与创新、信息社会责任。计算思维是指个体运用计算机科学领域的思想方法,在形成问题解决方案的过程中产生的一系列思维活动,运用合理的算法形成解决问题的方案,并迁移到与之相关的其他问题的解决中。《标准》中对“必修课程模块1:数据与计算”中的程序设计的要求是:“掌握一种程序设计语言的基本知识,使用程序设计语言实现简单算法。通过解决实际问题,体验程序设计的基本流程,感受算法的效率,掌握程序调试与运行的方法。”这就明确了在这一轮课改中,普通高中信息技术课程需要进行程序设计语言的教学。在众多程序设计的语言中,Python作为一种面向对象的解释型计算机程序语言,具有简单、免费、开源、可移植性的特点,在信息技术新教材的编写时倍受青睐,成为首选。
在2003版课标实施的十多年里,笔者所在地区的普通高中信息技术选修课程没有选择“算法与程序设计”模块,很多高中信息技术教师也十多年没有教授过程序设计,因此,为了更好地学习和使用新教材,笔者所在地区组织了全体高中信息技术教师Python语言线上培训,在培训时一道关于循环结构的填空题引起了大家的热议。
● 试题及参考答案分析
題目如图1所示,这是一道经典的循环结构程序题。在分析本题答案之前先要了解range()和print()两个函数相关的参数含义。函数Range()格式:range(begin,end,step),如下页表1所示。函数Print()格式:print(value,…,ep=’’,end=’\n’,file=sys.stdout, flush=False),如下页表2所示。
参考答案为:①1,101;②s i;③s。分析:①空需要填写的内容为变量i从1穷举到100,故填1,101;根据②空后面的提示,将变量i的值累加到累加器s中,故填s i;③空就是要填输出累加器s的值,故填s。
本题的参考答案是教师和学生们很容易思考到的,也符合常规思维,但由于本题设计的填空关联度非常高、Python语言的range()函数的参数可省略和print()函数的格式灵活性等特点,教师们经过讨论发现本题除了参考答案外还有许多解,答案不是唯一的,无论是笔试还是机试,教师在批改作业时都会遇到麻烦。
● 多解详细分析
解法1:①空填“1,100,1”或“101”,②、③空不变。
分析:range(1,101,1)的步长为1,生成1,2,3,…,100的序列,range(101)表示从0开始计数,生成0,1,2,3,…,100的序列,循环执行后变量s中保存的结果是从1到100的和。range(101)多执行一次循环,结果不变;range(1,101,1)跟range(1,101)执行循环次数是一样的。
解法2:①空填“1,100”或“100”,②空不变,③空填s 100。
分析:range(1,100)生成1,2,3,…,99的序列,range(100)生成0,1,2,3,…,99的序列,循环执行后变量s中保存结果是从1到99的和,最后通过输出时s变量 100,如此也能求出1到100的和。当然,顺着这种填法,若①空填“99”、③空填s 100 99,输出结果也是1到100的和,如此思路还会填出多种组合的答案来,但缺少理由认为这些答案就是错误的,只是没有充分利用for语句功能而已。
解法3:①空填“100,0,-1”,②、③空不变。
分析:range()函数的步长参数可以为负数,生成的序列为倒序。例如,range(100,0,-1)生成从100至1、间隔为1的连续递减的等差数列序列100,99,98,…,2,1,从而求出从100到1的和。有时我们逆向思考,采用倒序也是解决问题的好方法。
解法4:①、②空不变,③空填“’和=’,s”或“"和=",s”等。
分析:print()函数可输出多个value,value可以是数值也可以是字符串等,若加上字符串可清晰地显示输出的值是什么的结果,如此解输出为“和=5050”,结果指向性更明确。因为字符串的值可以任意选取,以及print()函数可以设置“sep=’’”等多个参数,所以③空还能填出许多种答案,如print(s,sep=’’)等。
解法5:①、②空不变,③空填“5050”。
分析:高斯巧妙地用(1 100)×50很快就把本题结果计算出来了,如果有学生在③空就填“5050”,是正确还是错误呢?因为本题是计算1 2 3 … 100的和,程序不需要输入,程序结果是什么也是已知的,程序运行后结果显示也是正确的,如此填写很难确定是对还是错。当然,如果学生要这样填,只是本题程序运行结果显示正确,但并没有充分理解累加器s的作用,也没有理解程序设计的基本流程,不利于培养计算思维,也不利于分析和理解算法,所以教师在教学过程中需要加强算法引导防止此类现象发生。
● 试题修改及解析
由于在设计本题的题干时,填空的限制条件相对宽松,导致多解,综上分析,为使答案具有确定性,从而更好地培养学生的计算思维和编程能力,也方便教师讲解此题和批改作业,可进行如下几种修改。
修改1:若填写参考答案的结果,可增加题干限制性说明(如下页图2)。
解析:增加两处限制说明,学生解题时方向清楚,答案也就明确,考查学生的“双基”。
修改2:调整填空项(如下页图3)。
解析:将变量i的取值范围和输出固定,这样设计的填空既考查了学生Python语句的基本知识,又训练了学生的计算思维,培养了学生分析问题的能力。
在2003版课标实施的十多年里,笔者所在地区的普通高中信息技术选修课程没有选择“算法与程序设计”模块,很多高中信息技术教师也十多年没有教授过程序设计,因此,为了更好地学习和使用新教材,笔者所在地区组织了全体高中信息技术教师Python语言线上培训,在培训时一道关于循环结构的填空题引起了大家的热议。
● 试题及参考答案分析
題目如图1所示,这是一道经典的循环结构程序题。在分析本题答案之前先要了解range()和print()两个函数相关的参数含义。函数Range()格式:range(begin,end,step),如下页表1所示。函数Print()格式:print(value,…,ep=’’,end=’\n’,file=sys.stdout, flush=False),如下页表2所示。
参考答案为:①1,101;②s i;③s。分析:①空需要填写的内容为变量i从1穷举到100,故填1,101;根据②空后面的提示,将变量i的值累加到累加器s中,故填s i;③空就是要填输出累加器s的值,故填s。
本题的参考答案是教师和学生们很容易思考到的,也符合常规思维,但由于本题设计的填空关联度非常高、Python语言的range()函数的参数可省略和print()函数的格式灵活性等特点,教师们经过讨论发现本题除了参考答案外还有许多解,答案不是唯一的,无论是笔试还是机试,教师在批改作业时都会遇到麻烦。
● 多解详细分析
解法1:①空填“1,100,1”或“101”,②、③空不变。
分析:range(1,101,1)的步长为1,生成1,2,3,…,100的序列,range(101)表示从0开始计数,生成0,1,2,3,…,100的序列,循环执行后变量s中保存的结果是从1到100的和。range(101)多执行一次循环,结果不变;range(1,101,1)跟range(1,101)执行循环次数是一样的。
解法2:①空填“1,100”或“100”,②空不变,③空填s 100。
分析:range(1,100)生成1,2,3,…,99的序列,range(100)生成0,1,2,3,…,99的序列,循环执行后变量s中保存结果是从1到99的和,最后通过输出时s变量 100,如此也能求出1到100的和。当然,顺着这种填法,若①空填“99”、③空填s 100 99,输出结果也是1到100的和,如此思路还会填出多种组合的答案来,但缺少理由认为这些答案就是错误的,只是没有充分利用for语句功能而已。
解法3:①空填“100,0,-1”,②、③空不变。
分析:range()函数的步长参数可以为负数,生成的序列为倒序。例如,range(100,0,-1)生成从100至1、间隔为1的连续递减的等差数列序列100,99,98,…,2,1,从而求出从100到1的和。有时我们逆向思考,采用倒序也是解决问题的好方法。
解法4:①、②空不变,③空填“’和=’,s”或“"和=",s”等。
分析:print()函数可输出多个value,value可以是数值也可以是字符串等,若加上字符串可清晰地显示输出的值是什么的结果,如此解输出为“和=5050”,结果指向性更明确。因为字符串的值可以任意选取,以及print()函数可以设置“sep=’’”等多个参数,所以③空还能填出许多种答案,如print(s,sep=’’)等。
解法5:①、②空不变,③空填“5050”。
分析:高斯巧妙地用(1 100)×50很快就把本题结果计算出来了,如果有学生在③空就填“5050”,是正确还是错误呢?因为本题是计算1 2 3 … 100的和,程序不需要输入,程序结果是什么也是已知的,程序运行后结果显示也是正确的,如此填写很难确定是对还是错。当然,如果学生要这样填,只是本题程序运行结果显示正确,但并没有充分理解累加器s的作用,也没有理解程序设计的基本流程,不利于培养计算思维,也不利于分析和理解算法,所以教师在教学过程中需要加强算法引导防止此类现象发生。
● 试题修改及解析
由于在设计本题的题干时,填空的限制条件相对宽松,导致多解,综上分析,为使答案具有确定性,从而更好地培养学生的计算思维和编程能力,也方便教师讲解此题和批改作业,可进行如下几种修改。
修改1:若填写参考答案的结果,可增加题干限制性说明(如下页图2)。
解析:增加两处限制说明,学生解题时方向清楚,答案也就明确,考查学生的“双基”。
修改2:调整填空项(如下页图3)。
解析:将变量i的取值范围和输出固定,这样设计的填空既考查了学生Python语句的基本知识,又训练了学生的计算思维,培养了学生分析问题的能力。