小于三位的正整数 正则式_蓝调解码|样板文章,投稿必读:计算思维培养的“递进式”活动设计研究...

本号已推荐《中国信息技术教育》2020年3月刊发表。

aae3b407fe8d818376aea09a11bdbbfc.png

计算思维培养的“递进式”活动设计研究

  王静文  淄博实验中学 255090

  崔国亮  淄博实验中学  255090 

高中信息技术新教材的编程和算法教学注重培养学生的计算思维,体现了新课标发展学生核心素养和学科能力的理念。本文旨在探究如何在课堂教学中设计丰富的学习活动、培养学生的计算思维,并引导学生产生思维迁移以解决实际问题。

一、递进式培养策略概述

信息技术学科与时俱进,不再局限于知识技能和工具操作,而注重培养学生数字化环境下的思维方式,使学生能够合理运用信息技术解决实际问题。为了培养学生的计算思维,新教材的编程和算法教学采用项目式学习方式,让学生在做中学、在学中做。在项目式学习中,应用和实践是学习的载体,活动过程即获得知识和培养能力的过程。

高一学生以前没有接触过Python编程,面对具体的情境,学生能用自己的话说出解决问题的方法,但不知如何用计算机程序实现。比如,判断一个数的奇偶性,通常看它能否被2整除;转换成编程计算,则采用对2取模的方法,判断余数是否为0。学生的计算思维需要慢慢形成,可以从解决简单的问题开始培养,让学生在学习活动中一边熟悉基本语法,一边提升思维能力。

在教学中不断摸索,体会“用教材教”,而不是“教教材”。教材中的资源一般具有普适性,是优质资源,但是不一定满足所有学生的需求。教师可以根据学情,补充相关资源。因此,依据教材资源并结合信息学竞赛辅导资源,设计一系列学习活动,作为教材的补充,可以让活动内容由浅入深,在活动开展过程中递进式地培养学生的计算思维。

二、学习活动一脉相承

依据项目式学习因“需”定“学”的特点,基于课程标准,结合学生的学情,我们对教科版必修1《数据与计算》第2单元“编程计算”的教学内容进行整体规划,设计了一系列递进式学习活动。 

活动1:求一个三位正整数每位上的数字

设计意图:理解通过整除和取模等运算拆分数字的方法;学会定义变量、使用赋值语句。拆分数字的方法也将用于后面的问题解决中。

算法分析:利用 “//”和“%”等算术运算符拆分一个三位数,分别得到每位上的数字。

小结:程序设计采用顺序结构。学生需要区分数学与Python中算术运算符的表示方法与运算功能。

活动2:输入一个三位正整数,判断它是不是回文数。若一个数字从左向右读与从右向左读都一样,我们就将其称之为回文数。

设计意图:结合前面拆分数字的算法提取出百位数和个位数,判断它们是否相等;熟练使用if分支语句进行条件判断。

算法分析:如果数字n的百位数字h和个位数字u相等,则n是回文数,否则不是。

小结:程序设计采用分支结构。学生已经掌握拆分数字的方法,在此基础上,设计判断回文数的算法变得容易一些。

活动3:反转任意位数的正整数,例如:输入123,输出321。

设计意图:理解反转数字的算法思想;了解while语句一般用于循环次数未知的情况。

算法分析:

(1)将x除以10取余,求得个位数,并将它添加到y中;

(2)将x除以10取整,去掉个位数;

(3)重复步骤(1)(2)直到x为0。

(4)输出y

小结:程序设计采用循环结构。算法中不仅包含拆分数字的方法,还包含组合数字的方法,具有一定的难度。活动中教师和学生一起将流程图补充完整,然后学生独自将程序补充完整。

活动4:输出所有的“水仙花”数。所谓的“水仙花数”是指一个三位数其各位数字的立方和等于该数本身 

设计意图:枚举所有的三位数,使用拆分数字的方法,得到各位数字,然后通过计算进行判断;综合运用for循环和分支语句解决问题。

小结:解决这个问题采用了循环+分支的程序结构。学生学习的难点是for语句的循环过程和if语句条件的设置。学生需要注意:range()函数设置两个参数时,会生成一个左闭右开的数字区间;在if语句的条件中两个等号一起使用才能判断相等。

活动5:火柴棒摆数字问题。有任意数量的火柴棒,列出这些火柴棒所能摆出的自然数,要求火柴棒正好用完。 

9cc07f40705e069dc8074c2e0c4cbd7b.png

设计意图:在解决问题的过程中,学会使用自定义函数进行程序设计。通过对算法进行优化,学生加深对算法设计的理解。

算法分析:首先确定任意根火柴棒所能摆出的最大数字,火柴棒数量分为奇偶两种情况,偶数根能摆出的最大数字由snum//2个1组成;奇数根火柴棒则先取出三根摆放数字7,然后用剩余的火柴棒摆放(snum//2-1)个1。参考程序如下:

def match_num(num):

#计算一个数字需要多少根火柴棒

    f=[6,2,5,5,4,5,6,3,7,6]

    if num==0:               

        total=f[0]

    else:

        total=0

    while (num>0):

        x=num % 10

        total=total+f[x]        

        num=num//10

    return total

#主程序   

snum=int(input('请输入火柴棒数量:'))

if snum%2==0:

   n=snum//2

   maxnum=int(n*'1')

else:

   n=snum//2-1

   maxnum=int('7'+n*'1')

print("你可以拼出这些数字:")

for i in range(maxnum+1):             

    if match_num(i)==snum:

        print (i)

算法优化:上述程序中使用“*”运算符返回一个重复若干次的字符串,在Python语言中适用,在VB和C++等语言中都不适用。运用for循环计算任意根火柴棒所能摆出的最大数字,会使算法更加通用,而且不会增加算法的时间复杂度。相应代码修改如下:

if snum%2==0:

maxnum=0

n=snum//2

else:

maxnum=7

n=snum//2-1

for i in range(n):

maxnum=maxnum*10+1

小结:在程序设计中使用了自定义函数。理解自定义函数的难点是函数的调用过程:程序执行从主程序开始,在主程序中遇到自定义函数的调用语句时,才会转到自定义函数执行,自定义函数执行完成将返回值带回给主程序。

拓展活动:十进制转换R进制

算法分析:把十进制非负整数转换为R进制,可使用短除法,即“除R取余,逆序排列”。前面拆分十进制数字重复执行对10取余、再整除10的操作;而十进制转换R进制则重复执行对R取余、再整除R的操作。

小结:十进制转换二进制本来是一个难点,学生不易理解,但是在前面解决了一系列数字问题之后,将解决问题的思维迁移过来,这个问题就迎刃而解了。 

在以上活动中所设计的的程序从顺序结构到分支结构、循环结构,再到分支+循环结构,程序结构不断升级。简单的拆分数字方法在后面的活动中不断使用,探究内容保持在学生的最近发展区内。在课堂上,学生积极思考、寻找解决问题的方法。编写代码、调试程序、纠正错误的过程,也使学生感受到编程的乐趣,激发了学生的学习兴趣。

三、教学反思贯穿始终

学生在学习编程与算法之前,可能存在畏难情绪,认为程序代码晦涩难懂,算法设计比较复杂,通过整体规划学习活动,引导学生步步为营,在算法学习中找到乐趣。算法教学是一项连续性工程,学生计算思维的形成也不是短期能实现的,这就需要教师不断反思、不断摸索,梳理教学思路,形成系统的知识框架,引领学生踏上算法学习之路,在路上递进式地培养学生的计算思维。 

(本文系山东省淄博市教育科学重点课题“高中学生信息素养的现状调查及提升策略的研究”研究成果之一。)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值