2020年青少年信息学python教案 p12_教案——《贪心算法》

相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

# 纸币种类 # 结果
8 for i in range(6):
9
number[i] = target // money[i]
10
target = target % money[i]
# 取整,算出当前面值可以找的最大张数 # 取余,算出当前面值找零后剩下的钱数
11 colors = ["red", "green", "blue", "purple", "yellow", "orange"]
8
dig_4 = money // 1000
Fra Baidu bibliotek
9
money = money % 1000
10
dig_3 = money // 100
11
money = money % 100
12
dig_2 = money // 10
13
money = money % 10
14
dig_1 = money
15 #3.显示出对应的中文效果(完善项目)
3 cn_list = [" 零 ", ' 一 ', ' 二 ', ' 三 ',' 四 ', ' 五 ', ' 六 ', ' 七 ', "
八 ", " 九 "]
4 if money // 1000 >= 10:
#判断输入的数据是否大于 4 位
5
print(" 超出范围! ")
6 else:
7
#2.通过计算把每一个位数的数拆分出来
12 for i in range(6):
13
print(money[i], " 元的张数为:", number[i], " 张 ")
14
myPen.pencolor(colors[i])
15
myPen.forward(number[i]*100)
【代码截图】
4、课中拓展
1、操作题(难)
【题目】
【答案】
【下一个衔接话术】
好的,那么我们以及知道了取余取整的含义。接下来我们一起来建立一下找零任务的规则,看 完视频可以告诉老师。
视频2:找零钱问题的思路
【任务】确定找零钱算法的规则。
【知识点】
1、对于算法来说,一定要简化问题、设定一个能找到最优解的规则 2、找零钱:
【下一个衔接话术】
看完视频我们知道,为了简化问题,就要设定一个能找到最优解的规则。现在确定好了找零钱 的规则,那接下来我们一起来完成找零程序的编写。
6 number = [0, 0, 0, 0, 0, 0] 7 # 循环,从最大面值的纸币开始找零钱
8 for i in range(6):
9
number[i] = target // money[i] # 取整,算出当前面值可以找的最大张数
10
target = target % money[i]
# 取余,算出当前面值找零后剩下的钱数
【知识点】
1、符号: 除法符号:/ 取余符号:% 取整符号://
2、当被除数小于除数时,取整结果为0,取余结果为被除数本身。
➗ 比如:2 5 = 0……2 ,取整为 0,取余为 2
【视频任务】
【效果截图】
【代码块】 1 print(5//2,5 % 2) 2 print(2//5,2 % 5)
【提问】
视频3:找零钱程序
【创作任务】完成找零钱程序的编写。
【知识点】
1、利用取整,来得到当前纸币种类能找的张数。 2、利用取余,来得到剩下还没找的钱数
【视频任务】
【效果截图】
【代码块】
1 # 找零钱目标数
2 target = 99 3 # 纸币种类
4 money = [50, 20, 10, 5, 2, 1] 5 # 结果
【效果截图】
【代码块】
1 target = 175 # 目标数 2 name = ["D", "B", "F", "E", "C", "G", "A"]
# 种类
3 weight = [50, 30, 10, 40, 60, 25, 35] 4 value = [50, 40, 40, 35, 30, 30, 10] 5 number = [0, 0, 0, 0, 0, 0, 0]
# 重量 # 价值 # 结果
6 total_value = 0 7 # 循环,从最大价值的物品开始找
8 for i in range(7):
9
if target >= weight[i]:
#判断,当前的背包容量大于等于物品重量
10
number[i] = number[i] + target // weight[i] #取整,算出当前物品价值可
16 print(cn_list[dig_4]+" 千 "+cn_list[dig_3]+" 百 "+cn_list[dig_2] +"
十"+cn_list[dig_1]+" 元 ")
【代码截图】
5、总结
①学生总结完毕,发送总结卡片
②老师总结:(可发总结卡片) 1、这节课我们学习了取整运算,利用取余取整运算完成了找零程序的编写。 2、了解了贪心算法:它每一步都是用最简单的规则取考虑,得到在当前规则下的最优解。 (如果总结完毕了的话呢,可以给老师发送一个OK。) ③询问本堂课是否还有疑问 ④看结尾番剧视频,结束告诉老师 点击下课,请学生评价。 ⑤下课话术 好的,那么我们这节课到这里就结束啦,期待你下一节课更加精彩的表现,训练师再⻅~
以找的最大数量
11
target = target - weight[i] * number[i]
#算出当前背包剩余容量
12
total_value = total_value + value[i] * number[i] #计算总价值
13 print(" 背包总价值为:", total_value)
14 print(" 背包剩余容量为:", target, "kg")
【提问】
Q:运用贪心算法得到的结果一定是最好的吗? A:贪心算法有时并非是最好的结果,但一定是最方便快捷的。刚才的视频中也有印证这一 点。
【图片任务】
【提示】需要导入海⻳库,设置好画笔粗细。再创建一个颜色列表,颜色和对应的面值要一一 对应,在第二个 for 循环中去调用颜色列表中的颜色。 【答案】
15 for i in range(7):
16
print(name[i], " 物品数量为:", number[i], " 个 ")
【代码截图】
2、操作题
【题目】
【答案】
【效果截图】
【代码块】
1 #1.获取输入的数据,然后进行转换和判断
2 money = int(input(" 请输入金额(不要超过 4 位):"))
【效果截图】
【代码块】 1 import turtle 2 myPen = turtle.Pen()
3 myPen.pensize(5) 4 target = 99 # 找零钱目标数 5 money = [50, 20, 10, 5, 2, 1] 6 number = [0, 0, 0, 0, 0, 0] 7 # 循环,从最大面值的纸币开始找零钱
Q:当被除数小于除数时,取整和取余的结果分别是什么呢? A:当被除数小于除数时,取整结果为0,取余结果为被除数本身。
➗ 比如:2 5 = 0……2 ,取整为 0,取余为 2
【课中练习】
以下代码运行的结果是什么?
a=2 b=3 c=5 d = a+b*c//a print(d%2) A. 2 B. 3 C. 5 D. 1 答案: D. 1 答案解释: d 的值为 2+3*5//2 的结果 9,所以最终运行结果是 9%2 得到 1
11 #循环打印出不同面值对应的张数
12 for i in range(6):
13
print(money[i], "元的张数为:", number[i], "张")
【代码截图】
【下一个衔接话术】
接下来啊来我们详细的来了解一下什么是贪心算法吧。
视频4:认识贪心算法 【知识点】
1、贪心算法:它每一步都是用最简单的规则取考虑,得到在当前规则下的最优解。 2、贪心算法有时并非是最好的结果,但一定是最方便快捷的。
p12 教案——《贪心算法》
【上节课衔接语】 好的上节课呢我们了解了什么是算法,并结合取余循环绘制出了彩色多边形。那么 这节课呢,我们将结合贪心算法的思想和取余取整运算来完成找零程序的编写。
1、知识点
2、课前导入、任务说明部分
【知识概览】
3、任务清单
视频1:取整运算
【创作任务】试验一下取余取整的效果。
相关文档
最新文档