基于数学思维的计算思维学习设计

2017-09-07 04:29王爱胜
中国信息技术教育 2017年15期
关键词:程序设计剪刀程序

王爱胜

在新一轮的课程改革中,信息技术课程核心素养以信息意识、计算思维、数字化学习与创新、信息社会责任为主要内容。其中,最重要却最易模糊的是计算思维。因为计算思维目前除了在程序设计领域具有认可度之外,在其他领域尚无公认的应用。即使在程序设计领域,基本策略仍然是基于算法与程序的设计本体内容,如何形成计算思维教学设计仍是一线教师面临的难点。本文根据新一轮课标下的“数值与计算”模块的教学内容,结合新教材即将采取以Python编程语言为环境,探索数学思维与计算思维的联系,树立基于数学思维进行计算思维学习设计的观念,在一定程度上防止了计算思维的泛化,减少了计算思维在学习中的不确定性。

借分段函数实现程序判断,看计算思维在解决问题过程中的理论与实践表现

程序设计的基本流程是由构建数学模型、设计算法、编写程序代码、调试程序等环节构成的,这种用计算机解决问题的过程是最受肯定的基于计算思维的学习方式。学习者在接触编程语言之初,往往更侧重于计算机编程语言的语法格式学习,即使因为模仿的作用设计算法,也仍然是根据程序思考过程来进行。因此,不容易体会到计算思维的特质——计算机是如何思考、解决问题的。例如,以分支结构程序为学习内容,我采用“判断狗狗与人的相当年龄”为问题解决,使学生体会计算思维初步形成的过程。

第一步,对事物的描述。狗是人类的好朋友,是很多老年人的好伙伴。其中,有一个严重的问题是,狗会因为衰老、疾病等原因比主人去世得早,这给对它们产生深厚感情的主人造成了伤痛。为了了解狗的年龄规律,也为了疏通主人的情感,拟对狗的年龄与人类年龄进行对比,揭示其生命周期。至此,完全是事物描述,没有明确的问题解决方案。能想到与人类年龄进行对比,这是学生分析能力和逻辑思维的表现,并非数学思维,也非计算思维。

第二步,构造数学模型。通过网络调查研究,发现很多与狗的年龄分析相关的方式。与人类年龄对比,又分为几种情况,可构成如下分段函数。

设人的年龄是y,狗的实际年龄是x。

y=1 (x=1)

y=22 (x=2)

y=22+(x-2)×5 (x>2)

至此,构建数学模型完全是数学思维下的问题分析,与计算思维尚不沾边,但为计算思维的顺利产生打好了基础,这说明数学的确是科学技术之母。

第三步,设计算法。学生往往容易将设计算法与数学模型的构建混淆。实际上,这是基于计算思维的设计过程。解决本项问题的核心是判断,所以分析程序结构是其中的关键。以下我采用自然语言方式描述算法:

输入狗的年龄 注:不考虑用变量赋值,是为了提高程序的通用性,这是明确的计算思维。

如果x小于0 进行错误提示 注:这是计算机的容错处理,属于计算思维范畴。分支算法也是。

否则,继续判断如果x=1则显示1岁;

否则,继续判断如果x=2则显示22岁;

否则,则显示22+(x-2)×5岁。

至此,把数学思维与基于计算分支程序相结合,初步产生了解决方案,这是基于理论层次的计算思维体现。

第四步,编写程序代码。选用Python程序设计语言,按照其语法规则实现相应算法。程序代码如下:

#!/usr/bin/python

x = int(input("请输入狗狗的年龄: "))

if x <= 0:

print("你是在逗我吧!")

elif x == 1:

print("相当于 14 岁的人哦。")

elif x == 2:

print("相当于 22 岁的人哦。")

else:

print("对应人类年龄: ", y = 22 + (age -2)*5)

以上程序代码,采用int()函数转化字符串为数值,采用if、elif进行判断设计,这些都遵循了以上算法。

至此,在编程中的计算思维表现主要是在程序语法规范、代码实现上,体现在程序编写技能,这是实践层次的计算思维。特别是能够设计对输入字符的数值转化、对否定情况的分支嵌套,这完全是编程能力,如果从思维角度说自然是计算(机)思维方式的体现。

第五步,调试程序。在以往的调试程序中,可能只局限于运行程序、纠正错误,这虽然是非常重要的,但是对于学习者来说,更重要是发现问题并改进程序,并非只完成基本问题即可。例如,可以思考让程序重复执行,采用循环来改进程序,也可以采用自定义函数模块来优化程序。至此,优化程序这个进一步思考过程也是建立在计算思维形成的基础上的。反思整体过程,大家才能够更深入地体会到,计算思维在利用程序来解决问题的一般过程与方法上具有理论、实践多重表现。

从随机游戏的数学判断,看计算思维在数学思维促进下的成长

从数学模型到算法设计、代码编程这个过程,很容易让人忽视数学思维是计算思维的基础,过于强调算法设计与代码现实。

这时教师可以以一种外在的状态去观察。例如,随机函数是完全属于计算机科学的一种函数,它与传统的数学思维联系并不直接,采用随机数进行模拟现象无疑是属于计算思维范畴。现代数学研究统计、正態分布等对随机的理论贡献常人不易理解,而计算机利用“有限二进制字段上的矩阵线性递归”来模拟更真实的随机数也是基于数学与计算机科学的双重力量。

姑且不去讨论基于计算机强大计算能力下的计算思维的特质,以随机数的一个应用实例,观察很容易用分支程序来解决的问题,结合数学思维可以让程序技术更有技巧、更高效。这种计算思维的发展其实是在数学思维的促进中成长的。

先来阅读下面基于Python程序设计语言的“石头、剪刀、布”游戏程序。

#!/usr/bin/env python

import random; #导入随机模块

choice=[' ','剪刀','石头','布']; #数列前面设计1个空,是因为不用0表示

result=['你赢', '你输','平','你赢','你输']; #这个数据是关键,下面解释。

nc=int(input('请你出(1.剪刀; 2.石头; 3.布):'))

print('你出:',choice[nc])

jc=random.randint(1,3) #产生1-3随机数

print('计算机出:',choice[jc])

print(result[nc-jc+2]) #对应结果

以上程序设计难度不在于随机数的应用,而在于输赢这种随机情况的判断。这完全可以用逻辑关系,以分支程序(if)去很容易地判断,也可以思考一种更具有数学思维的方式。

第一,首先对双方博弈情况进行全面分析:

你出 如果计算机出 对应result 推理数学算式

1剪刀 1剪刀 [2]平 1-1+2

1剪刀 2石头 [1]你输 1-2+2

1剪刀 3布 [0]你赢 1-3+2

2石头 1剪刀 [3]你赢 2-1+2

2石头 2石头 [2]平 2-2+2

2石头 3布 [1]你輸 2-3+2

3布 1剪刀 [4]你输 3-1+2

3布 2石头 [3]你赢 3-2+2

3布 3布 [2]平 3-3+2

第二,输赢判断本来是一种逻辑关系,根据以上分析转化成基于列表的对应关系如下:

[0] [1] [2] [3] [4]

你赢 你输 平 你赢 你输

并由推理获得数学公式:nc-jc+2。

第三,基于列表对应关系形成列表,并推导出根据列表判断结果如下:

result[nc-jc+2]

至此,大家体会到基于计算机编程语言的数据结构是计算思维的一种重要表现形式之一。通过数学推理、数学计算等数学思维来架构更科学、高效的数学结构,会促成更深刻的计算思维形成,这样的思维是更具有生命力的。

总之,无论是在程序设计过程中观察计算思维的形成,还是从问题解决中采用数据结构让数学思维去促进计算思维的成长,这都是面向问题解决的计算思维学习设计的良好发展方向。如果认为用程序实现算法,就会形成计算思维,这样的“编码代工”式技术作业流水线缺乏数学思维,是对计算思维非常浅显的认识。

猜你喜欢
程序设计剪刀程序
基于OBE的Java程序设计个性化教学研究
项目化教学在Python程序设计课程中的应用
C++程序设计课程教学改革研究
医学专业“Python程序设计”课程教学改革总结与思考
给Windows添加程序快速切换栏
简化化学平衡移动教学程序探索
“程序猿”的生活什么样
英国与欧盟正式启动“离婚”程序程序
石头剪刀布