与时间赛跑,让算法“减速”
2021-05-08李咪咪
李咪咪 中学二级教师,华东师范大学科学与技术教育硕士,现于上海市普陀区曹杨第二中学任教信息技术学科。在教学中善于将学科特征与新媒体、新技术进行融合,提升学生的学习兴趣,培养学生的计算思维。
课程背景
互联网平台“外卖骑手与时间赛跑”的问题,多次引发了社会各界的广泛关注。外卖骑手需在系统规定的时间内按时送达商品,这种算法忽视了天气、路况等因素对送达时间的影响。算法是工具还是机器?这个问题不禁引发公众的无限思考。而信息技术学科旨在培养学生信息意识、计算思维、数字化学习与创新、信息社会责任四个方面的核心素养,其中“信息社会责任”鼓励学生“关注信息技术革命所带来的环境问题与人文问题”。所以,本节课我将与学生一起探索如何利用分支结构改进外卖骑手计时系统,使得该系统更加灵活和人性化。
教学目标
知识与技能 描述分支结构的特点和执行过程;设置正确的分支判断条件;绘制规范的分支结构算法流程图。
过程与方法 根据问题情境,化归算法问题,使用分支结构解决问题;合理使用关系运算符、逻辑运算符表示分支结构的判断条件。
情感态度与价值观 在使用算法解决问题的过程中,摒除算法的“唯工具论”,思辨算法的社会伦理,明白要让算法为人服务而非人为算法服务;关注信息技术革命所带来的人文问题,尝试用算法知识解决上述相关问题。
教学重点与难点
教学重点 使用分支结构解决“外卖骑手模拟计时”问题。
教学难点 根据不同情境,设置正确的分支判断条件。
教学过程
一、温故“思”新——顺序结构到分支结构的过渡
1.何时取到外卖(复习顺序结构)
构建问题情境:骑手距离客户1.5km,假设骑手平均速度(含行进路程、上楼等)是2m/s,请问顾客多少分钟后可以取到外卖?
化归为算法问题:已知骑手与客户的距离s、骑手的平均速度v,依次输入距离s和平均速度v,根据“时间=距离/速度”公式求得所需时间(单位为秒),再将其转换为以“分钟”为单位进行输出。学生根据已学顺序结构的相关知识,使用流程图表达算法思路,并上机编程实现。
2.如何帮助外卖骑手走出计时困局(引出分支结构)
教师设问:教师展示网络上针对外卖骑手送餐计时算法的讨论,外卖骑手长期被困在系统规定的时间里,而系统忽视了客观因素对骑手行进时间的影响,启发学生思考。
教师进而设问:如何改进外卖平台计时系统的算法,使得该系统更加贴近骑手生活,更加灵活和人性化?
小组讨论:影响外卖骑手配送时间的因素具体有哪些?
交流总结:根据各小组讨论结果,汇总影响外卖骑手配送时间的主要因素(用户所在楼层数、行进路况、天气条件等)。
二、多一种选择,多一点温暖(走进分支结构)
1.前方路况影响配送时间
构建问题情境:骑手距离客户1.5km,假设骑手平均速度(含一般行进路程)是2m/s。如果前方修路,那么最终配送时间为原始时间的1.1倍;否则,按照原始方式计算时间。请问顾客多少分钟后可以取到外卖?
化归为算法问题:已知骑手与客户的距离s、骑手的平均速度v、前方道路状况flag,首先依次输入距离s、平均速度v和前方道路状况flag的值。然后判断前方是否修路,如果修路,时间系数为原始时间的1.1倍;否则,根据“时间=距离/速度”公式求得所需时间(单位为秒),再将其转换为以“分钟”为单位进行输出。
走进分支结构:学生思考已学“顺序结构”的流程图能否表示此算法,并阐释原因;教师展示用分支结构表示上述算法的流程图,如图1,并让学生尝试用语言描述此流程图;教师由特殊到一般,阐释分支结构的定义(根据给定条件是否成立而决定执行不同路径的算法结构);教师解释分支结构的执行过程,并讲授分支结构的语法格式。
程序实现:学生编程实现并测试结果。
2.楼层数影响配送时间(关系运算)
构建问题情境:骑手与客户的实时距离为1.5km,假设骑手平均速度(含一般行进路程)是2m/s。如果用户所在楼层大于3层,那么最终配送时间为原始时间的1.1倍;否则,按照原始方式计算时间。请问顾客多少分钟后可以取到外卖?
化归为算法问题:先输入距离s、平均速度v和楼层数f,再判断用户楼层是否大于3层。如果大于3层,那么时间系数乘以1.1;否则,按照原始计算时间的方式。算法流程图如图2。
走进关系运算:(1)问题引发思考:“楼层大于3”如何用表达式表达?判断结果又是什么?(2)由算术运算迁移到关系运算:算术运算——求大小,关系运算——比较大小;关系运算的结果是逻辑值(True或False)。(3)求关系运算的值。
程序实现:学生编程实现并测试结果。
3.楼层数与路况共同影响配送时间(逻辑运算)
构建问题情境:骑手与客户的实时距离为1.5km,假设骑手平均速度(含一般行进路程)是2m/s。如果用户所在楼层大于3层或者修路长度大于500米,那么最终配送时间为原始时间的1.1倍;否则,按照原始方式计算时间。请问顾客多少分钟后可以取到外卖?
化归为算法问题:输入距离s、平均速度v、楼层数f、修路长度l,再判断“用户楼层大于3层或者修路长度大于500米”条件是否成立。如果条件成立,那么时间乘以系数1.1;否则,按照原始计算时间的方式。算法流程图如图3。
走进逻辑运算:逻辑运算符用于连接简单的逻辑表达式。其运算规则及范例值见下表。
程序实现:学生编程实现并测试结果,具体VB代码如下。
Dim s As Single, t As Single, v As Single,f As Integer,l as Single
s = Val(InputBox("请输入骑手与顾客之间的距离(注意:单位为m)"))
v = Val(InputBox("请输入骑手平均速度(注意:单位为m/s)"))
f = Val(InputBox("请输入楼层数(注意:单位为层)"))
l=Val(InputBox("请输入修路长度(注意:单位为m)"))
If (f>3 or l>500) Then
t = (s / v) * 1.1
Else
t = s / v
End If
t = t / 60
Label1.Caption = t & "分钟后送达"
教学反思
本课从社会热点问题“外卖员计时算法”入手,以“什么时候取到外卖”情境贯穿课堂首尾,由“楼层数大于3”引出关系运算,由“楼层数大于3或者修路长度大于500米”引出逻辑运算,问题依次过渡,知识层层递进,情境貫穿流畅。
人与机器之间的关系是近年来常讨论的话题。是机器为人服务,还是人为机器服务?外卖骑手计时问题也是上述问题的缩影。学生在学习运用算法知识解决问题、让社会生活变得高效的同时,还需要关注算法应用带来的社会、人文问题。本节课学生虽然只是模拟改进外卖骑手的计时算法,但是通过理解情境、设计算法、编程实现等环节,他们进一步理解并践行了算法的人文性,思辨了算法的社会伦理。