大讨论作品之《成语接龙》

为了督促自己不停下学习的脚步,我决定尽可能每天来这里更新自己在编程方面学习和研究的成果,只要平时闲暇之余有所感触,我都会发到这里,大家一起勉励。

首先是上周在QQ群里和大家提到了制作“成语接龙”游戏的话题,在聊起这个话题之后,很多朋友给出了响应,并纷纷制作出了自己的项目,在这里首先感谢大家的支持。

这里稍稍总结一下。

游戏的规则我想我们大家都是了解的,无非就是在说出一个成语为前提的情况下,第一个字要和上一个人的答案中最后一个字相同,或同音同字,或同音不同字,或同字不同音。一开始,大家主要以制作同音同字这种情况为主,遇到的问题瓶颈在于,结尾的字太多了,相当于要把所有汉字开头的成语全部罗列出来,这将带来一个庞大的数据集合(列表),在Scratch群中,大家借助了列表的文本导入功能,成功将这个问题进行了变相的解决,之后按照读音,对文字进行分类,每个音一个列表,进而实现了同音不同字的解决方案。而对于最后一个同字不同音的部分,虽然可行,但奈何要从庞大的列表数据中筛选这些内容确实效率不高,所以最终没有特别的去实现它。

在Python群中,讨论的方向则在一开始就有了分歧,一部分学员依靠数据本地化,采用了类似Scratch中把成语存储在本地数据中的方法,建立了一个庞大的库文件(-_-||),另一部分学员则准备使用网络爬虫功能实现网络数据的采集,让网络作为程序天然的数据库存在,最终的事实证明这样的方案也确实优秀。

我们找到了一个网站,这个网站使用拼音作为页面,页面中列出了该读音下所有成语,这样问题转化为两个:1、将上一条成语的末尾文字的拼音找出来;2、从对应的成语列表页面内搜集所有的成语,并随机取出一个。

第1个问题,我们直接发现就在这个网站里,支持对每个文字进行Unicode检索,检索结果中恰好就有该文字的拼音,而且是所有读音,于是这个问题又分解成了两个新的问题:1、将该文字转换为Unicode;2、从文字检索结果页面中搜集所有的读音,并随机取出一个。

现在问题成了三个,但三个问题的难度对于爬虫知识来说,都不算难,其中页面数据搜集部分涉及到了正则表达式知识。这些问题多多少少都给大家带来了一些问题,绝大部分使用爬虫来做的学员只能使用比较繁琐的字符串处理方法,在获取的页面内容中搜集结果,正则表达式部分由于没有接触过,都不太明白该如何下手。最后在大家一起讨论+学习的氛围下,我们成功完成了正则表达式的匹配,也成功搜集到了我们要搜集的内容,并最终实现了在线版的“成语接龙”游戏。

之后我又在基础上,实现了判断回答的词组是否为成语等等。

然后,我通过玩这个游戏,认识了好多从来没听过的成语……

《青少年编程能力等级》标准正式发布

《青少年编程能力等级》标准正式发布,明年开放全国范围等级测试申报。
2019年年底前,第一次等级测试将于中国部分地区落地 。

  为深入贯彻《新一代人工智能发展规划》、《中国教育现代化2035》中关于青少年人工智能教育的相关要求,推动青少年编程教育的普及发展,支持鼓励青少年树立远大志向,放飞科学梦想,投身创新实践,中国软件行业协会联合全国高等学校计算机教育研究会、全国高等院校计算机基础教育研究会、中国青少年宫协会共同研制并发布《青少年编程能力等级》系列团体标准。
  标准研制团队由计算机教育专家、青少年编程培训机构教师、标准的应用单位代表共同组成,由清华大学、北京理工大学牵头。在标准研制过程中,通过调研分析、研讨、专家咨询、广泛征求意见等环节确保标准制定的规范性,尊重学科知识体系、遵循教育规律、适应学业发展,同时符合教育培训需求,兼具科学性与实用性。研制《青少年编程能力等级》系列标准的意义在于,解决目前青少年编程教育培训领域尤其是课外培训领域,阶梯型目标指引缺乏、培训内容良莠不齐等问题,通过规范教学内容引领行业按照符合青少年学生认知规律、知识和能力兼顾、计算思维和创造思维并重的路线良性有序发展。《青少年编程能力等级》标准的推出旨在为编程教育提供了一个指导和参考依据。
  中国软件行业协会培训中心在中国软件行业协会支持下,将广泛联合业内企业,通过开展青少年编程能力等级测评等工作将标准实施落地,为我国软件行业发展培养后备人才。

  日前,NCT(全国青少年编程能力等级测试)、CPA(青少年编程能力等级测评 )已经展开报名,有意向的学员及家长可以抓紧时间了解一下。

用Scratch来制作“逢七过”游戏(基础篇)

各位同学好,我们又见面了。今天给大家带来的是用Scratch制作一款“逢七过”的演示小游戏,通过制作游戏的过程,我们继续巩固Scratch中判断和循环的用法,同时对数学知识中的除法、余数等运算进行一个加深的理解。

  首先,先来简单的介绍一下我们提到的“逢七过”这个游戏。
  这个游戏的规则很简单,就是大家围成一个圈,然后由老师指定一名同学开始从1报数,在大家报数的过程中,凡是数字能被7整除的,同学们在报到这个数字时,都必须用一声“喵”来代替,之后后面的同学继续报数,那么游戏开始时报数会是这个样子的:1、2、3、4、5、6、喵、8、9、10、11、12、13、喵、15、16……随着游戏的进行,游戏的难度也会慢慢的提升,我们目前先从最基础的规则开始制作。

  我们来思考一下这个游戏要怎么进行,我们首先想到如果想要有一个不停增加的数字,我们要运用到“变量”模块;同时为了让它不停的增加,还需要用到“控制”模块中的“循环”功能;此外,在判断数字是否能被7整除时,还需要用到“控制”模块中的“如果…那么…否则”功能;最后,如果要让角色说出这个数字,还需要用到“”模块中的“说…”功能。
  我们先画个简单的流程图来说明一下。参看“流程图(1)”。

流程图(1)

  下面,我们来看Scratch积木代码。

  嗯,这个程序很容易就做好了,点击绿旗运行,没问题,角色如我们所设计的那样“1、2、3、4、5、6、喵、8、9、10、11、12、13、喵、15……”,开始依次报数了。成功!
  下面,我们来增加难度。
  在报数的过程中,如果数字中的某一位包含了“7”,就需要用“喵喵”来代替,比如“13、喵、15、16、喵喵、18……”。
  好了,我们来想想在程序中该如何实现吧。参看“流程图(2)”。

流程图(2)

  下面,问题来了,如何来判断这个数字中含有7呢?Scratch中为我们提供了一种很便捷的方法,这个积木位于“运算”功能区中,这个方法允许代入一个字符串类的参数,如果不是字符串的话,也会使其变化为字符串,然后判断这个字符串中是否有我们要求的字符。
  这里要注意,当我们在做多个条件的判断时,一定要分清楚几个条件彼此之间的关系。比如本题目中的判断条件就是只能满足一种情况,角色要不说“喵”,要不说“喵喵”,要不说出数字,在角色准备说出一个数字的时候,仅能说出这三种情况中的某一种,而不会同时出现两种的情况。这样的判断,我们需要使用到嵌套结构来实现,我们要使判断只能出现一种结果。具体可参看下图。

  下面,我们再来增加一次难度。
  在报数的过程中,如果数字中各个位置的数字的和为“7”,就需要用“喵喵喵”来代替,比如“13、喵、15、喵喵喵、喵喵、18……”。
  这次在程序中该如何实现呢,让我们慢慢来分析。
  流程图与之前的差不多,只不过是加入了第三个判断,用来判断数字各个位置的和是否为“7”。这次我们要用到“自制积木”这个功能。
  我们通过“自制积木”功能,将当前数字通过参数传递进自制积木的内部,让内部的程序来执行完结果,然后回到外部程序中,继续我们的判断。下面我们来看一下代码。

  这里,我们对于“各位求和”这个功能做了两种不同的积木块程序。

方法一

  方法一中,我们使用余数的方法,反复“切”下数字的个位,让它们相加,然后再设法将新数字的个位“切”下,继续相加,如此反复便可以得到整个数字各个位置的和。
  在这里我们用到了——向下取整这个功能。对数字除以10的结果进行向下取整,也就相当于把数字的个位直接切除,比如(向下取整 )123÷10,得到的结果就是12。当然如果这个方法不好理解的话,我们可以看下一种方法。

方法二

  方法二使用了Scratch中提供的字符串处理方法,直接逐位取出数字中的各个位置的数字,然后相加即可。

  至此,我们完成了“逢七过”游戏的三种游戏难度的Scratch方法移植,赶快点击小绿旗,让Scratch的小猫试着给我们演示一下这个游戏吧!  

  好了,这次带来的趣味小编程就到这里了,大家有任何的想法可加我的微信(下方二维码)、微博@亿万星辰桃桃爸,跟我一同讨论少儿编程,进入编程这五彩斑斓的世界,我们下期再见。

用Scratch来解决奥数问题之“韩信点兵”(基础篇)

从今天起,我们将每隔一段时间安排一次用Scratch来解决奥数问题的栏目。在这个栏目里,我们将通过Scratch编程来帮助我们理解奥数问题中的核心所在——解题逻辑。

  下面,我们先来看看题目。

  题目出自我国古代一道流传于民间的趣味算术题——“韩信点兵”。大致的故事是,楚汉争霸,韩信率领了1500名将士和敌人交战。大战过后,虽然汉军获胜,但死伤也有近五百人,剩下的大概刚有一千人出头,回营之后,韩信想要清点一下剩余的将士。

  只见韩信命令士兵3人站一排,最后一排多出2人;5人站一排,最后一排多出3人;命令士兵7人一排,最后多出2人。

  紧接着,韩信向将士们宣布了剩余的汉军人数是1073人。大家都觉得韩信点兵如此绝妙,纷纷觉得韩信是“神仙下凡”、“神机妙算”。

  下面,各位同学们,你们能像韩信一样“神机妙算”吗?

  我们先用数学的方法来试着解答一下。

  不过首先,我们先把题目的重点重新归纳一下,然后把题目换个说法。
  一个数字除以3余2,除以5余3,除以7余2,请找到满足上述要求的,大于1000的最小的数。

  首先,我们要明白这类题目所考核的知识点是公倍数的概念,要同时满足三个要求,意味着我们要在调整其中某一个条件的时候不能影响另外两个条件,所以我们根据第一个条件“除以3余2”,找到5和7的公倍数中满足此条件的,很容易,我们发现5×7=35,35÷3=11……2,35正是满足这个要求的数字;再来看第二个条件“除以5余3”,我们同样找到3和7的公倍数中满足此条件的,这也很容易3×7=21,21÷5=4……1,于是我们能得到,21×3=63,63÷5=12……3,63就是满足第二个条件的数字;同理,我们按照第三个条件,用相同的方法,可以得到30÷7=4……2,30是满足第三个条件的数字。
  我们把三个结果相加,发现35+63+30=128,这个结果除以3余2,除以5余3,除以7余2,正好满足了题目前半部分的要求,但它并不是大于1000的。究竟如何找到满足题目后半部分要求的答案呢?显然,我们要在目前已经得出的结果上加上一个数字,但加多少合适呢?我们需要加上一个不会影响当前余数变化的数字,也就是要加上一个能同时被3、5、7同时整除的数字,这难不倒我们,3、5、7的最小公倍数是3×5×7=105,我们用之前的结果128反复加上多次105,最终便会得到我们所要的结果。(如下表)

加上最小公倍数105的次数最终结果
1233
2338
3443
4548
5653
6758
7863
8968
91073

这样,我们得到了正确的答案,1073。

如何用数学的方法来解答这道题目说完了,不免有些繁琐复杂,下面我们用编程的方法来试着解答一下。

  我们先来看一下这位同学是如何解答的。

  我们来看这位同学的答案。
  在这段代码里,这位同学在程序开始时,首先对他所用到的变量和列表进行了初始化,这样确保每次启动程序时,变量和列表都是处于“空”的状态,之后使用了循环、判断来重复的对“兵士数量”进行判断,看是否满足题目的要求,当满足题目要求时将答案存储到一个列表中,并在最后全部计算完毕后显示这个列表。

  之后的讨论,有同学指出了代码中可以改进的地方:我们需要的答案是超过1000的最小的那个“兵士数量”,也就是大于1000的第一个答案,那么没有必要设置一个列表来记录那么多的答案,我们只需要从1000开始找,找到的第一个答案就是最终的答案了。
  对于这点,我们通过讨论获得大家一致赞同,之后我们修改了部分代码。

  对于本次的题目而言,这样的答案可以说非常完美的找到了题目的答案,但编程的乐趣就是不断的升级,对于目前的答案其实还有很多地方能够继续深挖,在保证运算结果的前提下提升代码在运算时的效率,具体该怎么做,我们会在后续的“深入篇”中继续讲解。

  好了,这次带来的趣味小编程就到这里了,大家有任何的想法可加我的微信(下方二维码)、微博@亿万星辰桃桃爸,跟我一同讨论少儿编程,进入编程这五彩斑斓的世界,我们下期再见。

千呼万唤始出来 Scratch3.0 初体验

  近期,Scratch官方麻省理工学院终于发布了Scratch的3.0版本,实际上3.0的测试版早就出现在了网络上,之前我们也有过各种接触,这次作为3.0版本的正式出道,我们也重新做一次系统的介绍。

一、内核更新

  MIT和Google合作共同打造的以Blocky为核心的Scrach 3.0,采用了HTML5的页面技术,通过HTML5的良好跨平台性,Scratch3.0可以在 iOS&Android手机平板及PC上无差别使用。

二、界面变动

Scratch3.0主界面

  Scratch3.0界面更新,将舞台区移到右边,编程序放在中间,更加方便编程者编程程序;积木区不再严格分区,可以通过滑动鼠标来选择区块,减少点击率,增加了用户的体验度。

三、丰富多彩的扩展

Scratch3.0中丰富的扩展插件

  Scratch3.0整合并添加了插件模块,例如文字朗读模块,可以让角色真正的“说话”;翻译功能可以翻译多种语言;扩展了Makey Makey插件,把创意有趣味性的硬件加进来;乐高EV3在新版本中可以使用,增加了应用场景。

四、更好的中文支持

终于可以打中文了

  在2.0版本中,最让人崩溃的是没有办法输入中文,并且文字框不可以二次选中。更新的3.0版本中优化了这个功能,可以在编辑的文字框中输入中文,并且写过的文字框可以继续复选。大大方便了编辑效率。

  不过新的版本也带来了新的问题。

  首先,按钮变大了,但是上面的字实在是太小了……(眼睛遭受了很大的伤害……);第二个就是程序目前还不是很稳定,经常就会莫名其妙的崩溃,给积木块打上注释侯,注释会满屏幕的乱跑,也是很崩溃了……

  总的说来,新版本的Scratch带给我们的惊喜还是很大的,我们也将从Scratch3.0的基础开始,为大家逐步介绍编程的乐趣。

Scratch简介

  Scratch是一款由美国麻省理工学院(MIT) 设计开发的少儿编程工具。其特点是:使用者可以不认识英文单词,也可以不会使用键盘。构成程序的命令和参数通过积木形状的模块来实现。用鼠标拖动模块到程序编辑栏就可以了。你可以用它很容易地创造交互式故事情节、动画、游戏,然后还可以把你的作品分享给所有人。

Scratch的积木形模块

  开发者表示,这种电脑编程语言的目的,是帮助年轻人发展学习技能,学习创造性思维,以及学习集体合作。MIT(麻省理工学院)媒体实验室的博士生凯伦.布雷南,是Scratch项目的负责人,他说,“我们的目的不是要创办电脑程序编写大军,而是帮助电脑使用者表达自己。”

与其让孩子玩游戏;
不如让孩子做编程。

您觉得呢?

  Scratch不是游戏,是一款可以制作游戏、动画的编程工具。一旦掌握了这个工具,孩子们就能自由自在地挥洒它们无限的创意,享受创造的乐趣。Scratch由麻省理工学院媒体实验室开发出来至今,全美有超过100万的孩子在学习Scratch。而在台湾,中小学生的信息化课就是以Scratch为主来上的,也有许多Scratch教学的网站。


  相对于在学校信息课上所学的知识来说,用于初学者教学,Scratch有以下这些优点:

1、入门简单,无关原有编程基础,适合中小学学生初次学习编程语言时使用;

2、内容丰富,针对有兴趣、喜爱绘画的学生,提供角色绘制设计功能;

3、通过使用Scratch,让学生在动画、游戏设计过程中逐渐形成逻辑分析、独立思考创新的思维方式,学会提出问题,解决问题;

4、相比其他编程软件,Scratch更加直观,学生能比较容易地看到自己的劳动成果。

  学习编程最基本的是编程概念的掌握,Scratch以积木的形式进行编程,8个编程部件涵盖了常见的编程概念。学习编程最重要的是编程思想的培养,在程序学习中培养学生利用编程解决问题的能力。

  学生在学会了编程的基本原理和方法后,会有兴趣也有能力将动画和游戏编写得更逼真,更好玩。在修改动画游戏脚本的过程中,学生不断提出问题,解决问题,根据自己的需求进行分析,设定合适的角色和相应的脚本,最终实现程序。

Scratch编程实例