学习,思考,分享,创造

标签:少儿编程

白小迎曦分校Python社团课

周三上午从杭州出差回来,回家稍作休整之后,就直接来到了白小迎曦南校。今天是学校四年级学生Python编程社团的日子。

这个社团是鲸小小2019年面向学校合作的第二个合作成果。 学校的校长在收到我们的提议后,非常支持编程社团的开办,放手让老师们安排。虽然由于校区计算机室资源的问题,有些曲折,但是整体效率是非常高的。 老师们在帮助学生接触新的知识和技能,非常努力积极地在工作。

跟着负责这个项目的高老师,从教学楼的西边楼梯上二楼,辗转穿过教学楼,到了最东边的计算机教室。 教室里整整齐齐的摆着5排电脑,井井有条。

高老师介绍说,由于社团成立的时间比其他社团要晚,一开始担心与其它社团活动时间冲突,报名人数会比较少。

没想到的是,消息一经发出,就有来自于5个班的12位四年级的同学积极地选择了Python编程社团。

时间差不多了,同学们三三两两地陆续到来。

有同学一进来,就迫不及待地大声说:“老师,你知道我报了几个社团吗? 算上编程,有三个了!”

还有个同学说,她特别想来编程社团, 虽然班主任老师专门给高老师打了招呼,说她已经很忙了。但是她仍旧是来了。 这个同学进门之后兴奋地跟我讲了这么多。

这第一节课,课堂目标最主要的是:

1) 了解一下学生的水平。因为我知道,每个孩子接触电脑的机会是不一样的,使用电脑的程度参差不齐

2) 让学生们了解一下Python编程大概是怎么回事,为什么要学,要展示一个具体的例子

3) 介绍一下课程的安排和上课的一些基本规则

“多提问, 多尝试, 多分享”这样的三多理念当然也是要给同学们讲到的。除此以外, 在讲到多尝试的时候,补充了一下。

“在Python编程社团里面,你们不要轻易相信任何人的话,只有自己动手尝试过确认以后才能相信” 估计这帮孩子从来没有听到过课堂上的老师这么讲过,着实懵了一下下。经过解释之后,他们还是连连点头的。

孩子们需要开始更多地接触独立思考,独立验证这样的习惯了。技术方面来不得弄虚作假,大部分时间对就是对,错就是错。 学生们有了计算机工具,思维上再强化一下自主意识,自学意识,对于他们个人的发展也是很有帮助的。

这些学生中,有的上过计算机信息技术课,所以使用键盘输入,鼠标操作都非常熟练。有的很少接触电脑,也没有上过计算机信息技术课,所以在电脑上敲字挺费劲的。


教编程,真正地从零开始了。教如何输入大写字母,标点符号,汉字等等。 不知道孩子们在家有多少时间练习一下呀!


没有教他们安装Python软件包,而是课前早就请鲸小小的老师和高老师安装好了。 如果第一天教安装,对于电脑系统操作不熟悉的孩子,在短短的40多分钟中,估计大部分时间都是迷糊的,万一学习编程的热情遭受了打击, 罪过就大了。


在情绪调动起来之后,孩子们开始敲人生第一行代码。 首先教他们怎么打开Python的IDLE, 然后输入print()这样的指令。 熟悉键盘操作的学生一下就好了,不熟悉的就费点劲, 需要到他的位置上指导。 “Hello World” 这样的一行程序,有的同学需要漫长的时间才能敲好,有的三下五除二就好了。 然后为了让他们互相认识一下,就让他们编程给左手边的同学打招呼,然后再给右手边的同学打招呼。 一个同学挺投入, 完成之后,写程序给妈妈打招呼。做好了以后,把手举得高高地,让我过去看。


千里之行,始于足下。只要开始了,就有机会走得很远很远。

Cason 老师

受计算机室资源所限,我们只开了Python班。如果将来时机成熟了, 低年级的Scratch班, 高年级的C++班, Arduino班,Micro:bit班,都可以做起来。 希望编程社团能够做得越来越受欢迎, 很可能未来有一天,他们在大学中学习的课目,或者未来从事的工作,都会受益于这个社团的活动内容呢!

同学们加油!

解数独,学编程 -python 3

数独中每个格子地址的表示

上次我们已经学会了用列表来表示一个数独的值。 当某个空格的值我们不能决定时,可以用一个字符串来表示多个值, 比如下面,就表示A1处1到9都有可能,不能确定。
line1 = [‘123456789′,’7′,’8′,’123456789′,’123456789′,’123456789′,’123456789′,’123456789′,’123456789’]
这个是上次的作业。


本篇的目标是介绍如何用Python代码来实现一些最基本的数独的概念。
我们知道,每个数独的格子都是编号了, 比如 ’A1‘, ’B2‘ 等等。这些编号可以当做地址,所以快速生成这些地址也非常重要。

DIGITS意思是数字, 这里是一个字符串, 还有从1到9这些字符。

ROWS意思是行,含有’A‘ 到 ’I‘ 这些字符。 那么COLS就表示列, 行是字母, 列是数字。 上面是Python里面的三个字符串变量。


我们要写一个函数, 输入是行和列的表示,输出是一个数独格子的地址表示。

函数的定义和使用

函数在编程语言里可以根据一个功能,把一些语句组合起来。这样可以实现代码的重复使用,而且也容易阅读代码。

在代码中,函数涉及到定义和调用。

比如,下面就是一个函数的定义: 它始于用def 定义的函数名字。

def add(a,b):    
    return a+b 

这个函数输入两个值 a 和b,输出一个值, a与b的和。 return的意思是返回。

把a与b的和返回到函数的调用的地方。 这个函数的使用方法如下:

c = add(100, 200)

在函数执行的时候, a=100, b=200, 返回的就是 (a+b) = (100 + 200 ) = 300

函数定义中一遇到return , 函数就退出了, 返回到调用的地方。 在这里返回了300, 然后c这个变量的值是300 。


我们要写一个输入是行和列的值,输出可以表示每个格子的位置。

def cross(A, B):    
     # "Cross product of elements in A and elements in B."    
     return [a+b for a in A for b in B]


这个函数严格来讲只有两行, 里面要理解的概念倒不少。

首先就是列表的生成。


[a+b for a in A for b in B]


我们已经知道,用[]可以生成列表。 可是,这里的列表生成语句好奇怪啊。
我们先看 “for a in A”, 这部分的意思是说,对于每一个在A中的元素a 。

后面紧跟着 “for b in B”, 意思是 对于每一个在B中的元素b。
a+b 表示两个元素相加。我们知道 1+3 = 4而’1‘+’3‘ 就变成了 ’13‘而’A‘ + ’4‘ 就变成了 ’A4‘ 了。


如果我们不用列表生成语句,而是用普通的编程语句来实现,程序可能需要这样:

假如A = ‘abcd’, B= ’1234‘ 那么 程序执行的顺序就是:

先从A中取第一个元素’a‘,然后顺序从B中取各个元素’1234’,做加法,形成

      'a' + '1'  = 'a1'        
      'a' + '2'  = 'a2'  
      'a' + '3' =  'a3' 
      'a' + '4' =  'a4'         

然后从A中取第二个元素’b‘, 接着从B中取各个元素’1234′, 做加法,形成

'b' + '1' = 'b1'

'b' + '2' = 'b2'

'b' + '3' = 'b3'

'b' + '4' = 'b4'


以此类推。最后形成了一个列表, 结果是这样的

[‘a1′,’a2′,’a3′,’a4′,’b1′,’b2′,’b3′,’b4’, …. ‘d4’] 所以, 下面的列表生成语句就是先从A中取元素,然后再在B中取元素,做加法,最后形成一个列表。

[a+b for a in A for b in B]

由此,我们可以得出结论 函数 cross(A,B) 就是生成了一个新的列表,这个列表中每个元素都是来自于A和B的组合。

如果我们调用下面的语句:

CELLS = cross(ROWS, COLS)

CELLS变量的值就是一个列表, 其中包含了 [‘A1′,’A2′,’A3′,’A4’ …. ]

CELLS的意思是单元。 我们用它来保存数独中每个格子的地址。

作业

1. 已经知道一个列表A,其中都是数值, 请构造一个新的列表,其中每个元素都是列表A中元素的3倍。


2. 一个字符串A,内容是’this is good’, 请构造一个新的列表, 其中每个元素都是字符串A中字符的大写, 比如 [‘T’,’H’,’I’, ‘S’, ‘I’, ‘S’, ‘G’, ‘O’, ‘O’, ‘D’]


3. 理解CELLS中的元素值, 看它是怎么形成的。

Powered by WordPress & Theme by Anders Norén