“Python的激情抽奖”项目学习设计

2021-06-24 11:05唐菊明
中国信息技术教育 2021年11期
关键词:抽奖列表函数

唐菊明

项目式学习可以帮助学生主动探索进而解决现实生活中的问题,更深刻地理解和掌握相关的知识和技能。本文以“Python的激情抽奖”项目为例,探讨如何在信息技术课堂中进行编码教育项目式教学。

● 项目背景

很多人都经历过现场抽奖,抽奖前,总是期盼能够中奖。如果中奖了,会非常兴奋;如果没中,会很失望。本项目以激情抽奖为主题,设计的活动让顾客既有抽奖前的期盼,又有中奖时的惊喜,却没有“谢谢惠顾”的失望,在愉悦的氛围中提高学生学习程序的热情,增进学生对程序设计原理的认知。本项目把学科知识贯穿在项目分解后的任务中,使学生在解决问题的过程中学到知识,提高分析问题、解决问题的能力。

● 项目规划

本项目设计从每天光临奶茶店购买奶茶的顾客中,抽奖产生一位幸运顾客。为体现抽奖活动的公平性,需要把当天所有顾客的编号显示出来;为让使用者有身临其境的感觉,需要设置倒计时环节;为增加抽奖的神秘性,需要设置不同的奖项,还要让每天的奖项随机出现。

● 项目目标

①认识列表,掌握列表中append()函数的使用方法;②学会调用时间模块,知道sleep()函数的作用;③深入学习随机函数和字符串的知识;④能够熟练运用循环结构和选择结构,综合使用所学知识解决生活中的问题。

● 项目实施

1.情境导入:在活动中体验抽奖程序

师:同学们,老师今天带来了一份神秘礼物,要送给我们班的幸运之星,想要的同学请举手!(学生纷纷举手)大家都想要,可礼物只有一份,到底送给谁呢?老师很为难,让计算机来帮助我们做决定吧。(教师运行“谁是幸运之星”程序,从学生的编号中产生幸运者,送上有精美包装的奶茶)刚才的抽奖活动激动人心,现在,“幸运奶茶店”为了答谢顾客,也推出了“天天大抽奖”活动,每天准备一份精美礼品送给幸运顾客。这件事需要同学们使用所学的Python知识帮忙实现,快来帮助店主吧。

2.任务一:妙用广告语,调动抽奖气氛

师:要想让抽奖活动吸引人,需要设计巧妙的广告语。请开动脑筋,在你的电脑上设计激情飞扬的广告语吧。

设计意图:任务较简单,只需要使用print()函数即可以完成,非常有意义。设置此任务的目的是让学生站在店主的角度,考虑如何才能把抽奖活动做得更好。

3.任务二:巧用列表和函数,产生幸运顾客

师:为了体现活动的公平性,需要把当天所有顾客的编号显示出来。本任务的难点在于每天的顾客数目是不确定的,如何才能实现呢?大家可以使用列表来解决。

活动一:自主探究,产生顾客编号

师:我们设定每天的编号从0开始,往后依次递增加1。这样,只要输入当天顾客的总数,程序就能自动生成当天所有顾客的编号。现在请大家查看学习资源包,学习其中的列表相关知识,然后利用学习资源包,结合前面学习的for循环知识,自主探究,编写代码,完成此项功能。参考代码如图1所示。

总结:这里,使用for循环将顾客的编号分别添加到编号bh列表中,再使用print()函数将编号打印出来,巧妙地解决了问题。这是列表知识和循环知识的巧妙结合运用。

思考:成功生成的顾客编号有没有问题?

首先,编号的位数不统一,不规范。其次,留有篡改编号的机会。有没有更好的改进办法?可以使用类似001、002这样的编号,请学习学习资源包中的“认识rjust()函数”,修改代码,完善程序。以编号是三位数为例,参考代码如图2所示。这里的rjust()函数是字符串控制函数,指定字符串的宽度和对齐方式。

设计意图:活动的设置稍有难度,设计目的是培养学生的自主学习能力。虽然列表的知识和rjust()函数在以前没有接触,但在资源包里给出了详细的介绍和样例,学生只要稍动脑筋就可以实现。

活动二:合作交流,實现抽奖

师:通过学习,当天的顾客编号已经生成,如何从中产生幸运顾客呢?我们可以使用随机函数。首先导入随机函数的功能模块——import random,接下来用变量编号bh作为随机函数的参数,代码为luckycustomer=random.choice(bh)。

怎样才能让抽奖活动更有神秘感?还可以有哪些抽奖方式?(学生分组讨论可能的抽奖方式,然后小组汇报本组确定的抽奖方式)大家讨论的抽奖方式都很好,那么应该如何实现呢?请参考学习资源包中的“随机函数相关知识”,结合前面学习的字符串的相关知识,完成本组任务。以小组三的方式为例(从编号带6的顾客中随机抽出幸运顾客),参考代码如图3所示。

设计意图:抽奖方式的设计是为了让学生更加投入地参与到这个活动中,让抽奖方式更加丰富。同时,为了完成此项活动,学生对随机函数、字符串的使用也能认识得更加深刻。

4.任务三:使用时间函数,实现抽奖倒计时

这个活动在本项目中是一个难点,需要教师进行点拨。这里需要设计一个倒计时变量luckytime,用来接受用户的输入,然后使用for循环来实现。具体代码如下页图4所示。

这里,先导入时间模块,然后输入开奖倒计时,接着使用for循环把倒计时数字输出,time.sleep(1)的作用是让系统每次打印数字后等待一秒。

设计意图:在本项目中设计这个倒计时环节,是为了更好地模拟现场抽奖活动,让顾客对抽奖结果充满期待,让程序的操作更具灵活性。

5.任务四:活用选择结构,设计奖品奖项

师:抽奖活动的奖项设置应科学合理,可以先设置奖项的等次变量,再使用随机函数使奖项随机生成。而如何根据奖项确定奖品,则需要使用选择结构。请大家自主探究。

设计意图:奖品奖项的设置完全交给学生处理,让他们自主设计、编写代码,从而对之前学习的选择结构进行复习。

6.分享与交流(略)

7.拓展提高

如何在每个奖项中再设置随机奖品?你能利用今天所学的知识解决生活中的哪些问题?

● 教学反思

本课先是以学生为抽奖对象,给幸运学生送出神秘礼物,让学生置身于抽奖活动的兴奋中。接下来抛出问题:如何帮助奶茶店店主实现抽奖活动?这个项目乍听起来似乎让人摸不着头脑,但随着问题的深入剖析,整个项目一步步得以实现。在拓展提高中,学生根据所学知识,做出了不同的抽奖场景,有的是根据学习成绩的等级来设置奖品和奖励,有的是根据小组分工来设置不同的活动任务……解决问题的能力得到提高。

苍山点题

不说本期项目教学的概念、特征与价值,仅就本次两个教学设计的主题内容、程序代码以及大概念的涉及等方面的教学探索,都是非常接地气的,给一线教师提供了可理解、可操作、可复用的设计,这正是一线教学研究更有益的价值取向。

第一篇文章,作者全面阐述了对“信息系统”学科大概念教学的思考、探索与实践。特别是,在面对教材中有关学习项目普遍存在技术实现专业性强的现实瓶颈的情况下,与大家分享了开发简易版“班级图书管理系统”的全过程,包含项目的需求分析、功能模块、业务流程和代码实现等,让学生体验信息系统开发的过程、思想和方法等,提升核心素养,同时,为打造简易型“信息系统”提供了切实可行的技术方案、典型范本。这不仅在编程教学角度给我们提供了经验,还在信息系统的设计流程、功能实现角度给我们带来了更多的收获,后者也是更重要的。

第二篇文章,一方面,从抽奖活动的角度对随机、循环、分支、列表等基础的编程元素、算法与程序结构等进行了项目学习的设计,主要特点是能够分解活动流程、分解编程功能,循序渐进,让活动过程、问题需求、功能实现紧密结合;另一方面,其项目设计注重了“获奖”机会设计,打消了挫败感,提高了学生的学习兴趣,加强了大奖特征的判断等功能设计,增强了程序设计的策略与算法融合的意义。

编程教学的天地非常宽阔,不仅在数据计算而且在人工智能、信息系统、信息社会、信息安全等很多方面都大有可为,期待大家用更多的创新式的教学设计来推进程序教学的发展。

猜你喜欢
抽奖列表函数
扩列吧
大抽奖
列表法解分式方程问题探索
抽奖
关于函数的一些补充知识
高中数学中二次函数应用举隅オ
无独有偶 曲径通幽
列表画树状图各有所长
2011年《小说月刊》转载列表
幸运大抽奖