【核心素养目标】沪科版(2023)信息技术九上 第三单元 活动二《枚举商品搭配方法》课件+教案

文档属性

名称 【核心素养目标】沪科版(2023)信息技术九上 第三单元 活动二《枚举商品搭配方法》课件+教案
格式 zip
文件大小 12.8MB
资源类型 试卷
版本资源 沪科版
科目 信息技术(信息科技)
更新时间 2023-12-25 17:31:25

文档简介

(共43张PPT)
《编程解决问题-
常用算法的实现》
活动二:枚举商品搭配方法
沪教版 九年级上册
内容总览
学习目标
01
新知导入
02
分析问题
03
设计算法
04
目录
05
编写程序
06
运行、调试程序
09
07
10
08
课堂总结
知识链接
说说做做
课后作业
学习目标
1.信息意识:学习如何利用枚举法编程解决具体问题。
2.数字化学习与创新:通过实践活动,掌握运用枚举法解决生活中的搭配问题的方法;能够在实际情境下运用所学知识,解决实际问题。
3.计算思维:具备用计算机解决问题的能力。
4.信息社会责任:激发对计算机编程的兴趣和热情,将编程运用到生活中,锻炼自身的道德情操和品德修养,培养优秀的价值观和行为准则。
新知导入
枚举法是较常用的算法之一,可对要解决的问题的所有可能情况进行逐一检验,从而找出正确的解。在日常生活中使用枚举法有时会显得比较“笨拙”,花费时间较长,但计算机的高速运算能力保证了枚举法的可行性,而且对应的程序相对简单。
在本活动中,我们将利用枚举法编程解决具体问题,感受算法的价值和魅力。
分析问题
要解决的问题如下:某客户计划向商店订购 300 千克饼干,饼干有两种规格:大盒5千克一箱,小盒 2 千克一箱。为了便于运输不允许开箱,且客户要求大小盒都必须有,商品可以提供多少种搭配方法
设大盒数量为 x,小盒数量为y,则两者之间应满足的表达式为:
x*5+y*2=300
且x和y必须是大于等于1的正整数。
分析问题
如果先一一列举大盒数量x,列出x的所有可能性(从1到59,后者的情况为小盒为1).然后判断剩下的饼干用小盒装是否正好装完,即没有余量,也就是(300-5*x)能够整除2若能装完,则算出小盒数量 y。
大盒x (300-5*x)能整除2吗? 小盒y,y=(300-5*x)/2
1 否
2 是 145
...... ...... ......
59 否
以上这种算法其实是我们生活中常用的枚举法。枚举法就是按照问题本身的性质一一列举出该问题所有可能的解,并在逐一列举的过程中,检验每个可能解是不是问题的真正解,若是,则采纳这个解,否则抛弃它。
分析问题
解决本问题的枚举思路如下
枚举对象:大盒数量x。
枚举范围:x>=1且x<=59
检验条件:剩下的饼干用小盒装无剩余,即(300-5*x)%2= =0
分析问题
提示板:在以上检验条件中,算术运算符 % 执行求余数操作。
在日常生活中,当列举的方案很多时,用枚举法会显得十分繁琐、费时,且容易出错。枚举法主要适用于可能的答案总量较小或者无法找到其他更好方法求解的问题。但对计算机而言,其高速运算能力保证了枚举法的可行性。
分析问题
说说做做
生活中用枚举法解决问题的情景很常见,比如,忘记一串钥匙中哪一把是大门钥匙。选择生活中某个需要用枚举法解决的问题,并用自然语言或流程图描述其算法。
说说做做
1.拿出第一把钥匙
2.拿出第一把钥匙
3.拿出第一把钥匙
.
.
.
.
.
.
n.拿出第一把钥匙
试验第一把钥匙能否开门
试验第二把钥匙能否开门.
试验第三把钥匙能否开门.
.
.
.
.
.
.
试验第n把钥匙能否开门
列举
实验
设计算法
开始
x=1
(300-5*x)/2
输出x,y
i=i+1
结束
y=(300-5*x)/2


x<=59

编写程序
x=1
while x<=59:
if (300-5*x)%2==0:
y=int((300-5*x)/2)
print("大盒"+str(x)+"盒")
print("小盒"+str(y)+"盒")
x=x+1
说说做做
1.若将本例的枚举对象改为小盒数量,则小盒数量的枚举范围是多少 检验条件是什么 尝试修改算法和程序。
2.已知一个矩形的面积,且面积为正整数,求所有可能矩形周长的整数解。
若将本例的枚举对象改为小盒数量
解决本问题的枚举思路如下
枚举对象:小盒数量y。
枚举范围:y>=1且y<=150
检验条件:剩下的饼干用大盒装无剩余,即(300-2*x)%5= =0
说说做做
说说做做
开始
y=1
(300-2*x)/5
输出x,y
i=i+1
结束
y=(300-2*x)/5


y<=150

编写程序
y=1
while y<=150:
if (300-2*x)%5==0:
y=int((300-2*x)/5)
print("小盒"+str(x)+”盒")
print("大盒"+str(y)+”盒")
说说做做
已知一个矩形的面积,且面积为正整数,求所有可能矩形周长的整数解
def find_rectangles(area):
rectangles = []
for i in range(1, int(area ** 0.5) + 1):
if area % i == 0:
length = i
width = area // i
perimeter = 2 * (length + width)
rectangles.append((length, width, perimeter))
return rectangles
area = int(input("请输入矩形的面积:"))
rectangles = find_rectangles(area)
print("矩形的周长整数解为:")
for length, width, perimeter in rectangles:
print(f"长度:{length},宽度:{width},周长:{perimeter}")
知识链接
算法的优化
求100以内的素数,解决该问题可以采用枚举法,就是一个一个数字去检查。
该流程图中,判断i是素数这个模块还需细化。判断某个自然数是素数的依据是该数除1和本身外,不能被任何自然数整除因此,可以用一个循环结构的算法,检查 i能否被2至i-1间的自然数整除。
知识链接
算法如下
设isPrime=True
循环j从2到i-1
如果i能被j整除,则isPrime=False
如果isPrime==True,则i为素数,输出i
知识链接
优化算法
只需要把之前找到的素数全部记录下来每次检查的时候只要检查所有找到的素数是否可以整除i即可。
像这样利用问题的特点对算法或者流程的步骤进行简化的过程叫作优化。
知识链接
优化后的算法如下
设isPrime=True
循环j(范围为之前找到的素数集合 )
如果i能被j整除,则isPrime=False
如果isPrime==True,则i为素数,输出i,且将i加入素数集合j
运行,调试程序
观察运行结果,分析程序有无错误。若有,尝试解决。
数字化学习:
1. 如何将上例中大盒和小盒的搭配结果用列表保存起来 尝试上网学习并参考“知识链接”,完成程序的修改。
2.尝试上网学习并参考“知识链接”,了解常见的排序算法。
运行,调试程序
新知讲解
知识链接 列表
在Python中,可以用列表存储一系列对象所组成的系列。列表放在【】中表示当想要往列表中添加新的对象时,可以利用 append 函数。列表和用 range 生成的序列一样,在Python 中同样可以用for循环来完成遍历。
>>> # 创建空列表样
>>> a = [ ]
>>> # 在列表中添加一个元素
>>> a. append(1)
>>> a
[1]
>>>
新知讲解
append 函数的调用是用"."号引出的,表示这个函数是针对 a 这个对象进行操作,是针对列表对象的独有函数。像这样属于某类对象的专有操作函数,叫作对象的方法。求素数问题的 Python 程序如下:
#记录已经找到的素数用的列表
primes = [ ]
#遍历从2到100的所有数字
for i in range(2,101):
# 检查i是否为素数
isPrime = True
for p in primes:
if i%p== 0:
#如果能被之前的素数整除就不是素数
isPrime = False
#将找到的素数输出并存入列表中
if isPrime == True :
print(1)
primes.append(i)
单元挑战
1.一个五位数,万位和百位上数字未知,只知道该数是 57 和 67 的倍数,求该数所有的可能性。
2.已知三种水果糖每 500 克价格分别为 10 元、12 元、16元,为糖果店的营业员设计个程序,输入顾客购买的每种糖的重量,计算付款金额。
下列活动按能力要求分成三类,请从这三类活动中依次各选一项去挑战,并按照完成的情况给自己加星。
单元挑战
一个五位数,万位和百位上数字未知,只知道该数是 57 和 67 的倍数,求该数所有的可能性。
def find_numbers():
numbers = []
for i in range(10000, 100000):
if i % 57 == 0 and i % 67 == 0:
numbers.append(i)
return numbers
numbers = find_numbers()
print("该数的所有可能性为:")
for number in numbers:
print(number)
单元挑战
def calculate_payment(weight_1, weight_2, weight_3):
price_1 = 10
price_2 = 12
price_3 = 16
payment = (weight_1 * price_1) + (weight_2 * price_2) + (weight_3 * price_3)
return payment
weight_1 = float(input("请输入第一种糖的重量(单位:克):"))
weight_2 = float(input("请输入第二种糖的重量(单位:克):"))
weight_3 = float(input("请输入第三种糖的重量(单位:克):"))
payment = calculate_payment(weight_1, weight_2, weight_3)
print("付款金额为:", payment, "元")
已知三种水果糖每 500 克价格分别为 10 元、12 元、16元,为糖果店的营业员设计个程序,输入顾客购买的每种糖的重量,计算付款金额
单元挑战
1.设计一款可供两人玩猜数字的小程序,制定游戏规则,并编程实现。
2.设计程序,输出 100~200 之间所有的素数。
单元挑战
设计一款可供两人玩猜数字的小程序,制定游戏规则,并编程实现
start_time = time.time() #记录起始时间
guess = None #初始化猜测值
timeout = False #判断是否超时
while guess != target_number and not timeout:
try:
guess = int(input("请输入一个0-9之间的整数(按Enter键):"))
if guess < target_number:
print("太小了!再试一次...")
elif guess > target_number:
print("太大了!再试一次...")
单元挑战
设计一款可供两人玩猜数字的小程序,制定游戏规则,并编程实现
else:
end_time = time.time() #记录结束时间
elapsed_time = round((end_time - start_time), 2) #计算消耗时间
print("恭喜你猜对了!你花费了{}秒完成游戏。".format(elapsed_time))
except ValueError:
print("无效的输入,请重新输入一个整数。")
if timeout:
print("时间已经用完,游戏结束。")
单元挑战
设计程序,输出 100~200 之间所有的素数
单元挑战
1.编写程序,求两个正整数的最大公约数
2.编写程序,打印1到100之内的整数,但数字中包含7的要跳过。
单元挑战
编写程序,求两个正整数的最大公约数
单元挑战
编写程序,打印1到100之内的整数,但数字中包含7的要跳过。
知识链接
知识拓展:python算法的特征
1.输入: 算法具有0个或多个输入
2.输出: 算法至少有1个或多个输出
3.有突性:算法在有限的步骤之后会自动结束而不会无限循环,并且每一人步骤可以在可接受的时间内完成4.确定性: 算法中的每一步都有确定的含义,不会出现二义性5.可行性:算法的每一步都是可行的,也就是说每一步都能够执行有限的次数完成
知识链接
知识拓展:python算法的复杂度
1、衡量标准
算法在计算机执行中所消耗的时间
算法在执行中所占用的资源的大小,
如: 内存空间的占用大小算法的易理解性,易实现性
知识链接
知识拓展:python算法的复杂度
算法在计算机执行中消耗的时间
跟时间有关的因素
数据输入的时间
算法编译成可执行程序的时间计算机
执行每条指令的时间
算法语句重复执行的次数
课堂总结
1.学习了用枚举法编程解决具体问题;
2.学会了运用枚举法解决生活中的搭配问题;
3.复习整合单元内容,梳理所学知识。
作业布置
请同学们复习本节课学习的内容,用枚举法的方式解决问题,并且用枚举法解决生活中的一些简单问题。
谢谢
21世纪教育网(www.21cnjy.com)
中小学教育资源网站
兼职招聘:
https://www.21cnjy.com/recruitment/home/admin中小学教育资源及组卷应用平台
《枚举商品搭配方法》教学设计
课题 枚举商品搭配方法 单元 三单元 学科 信息技术 年级 九年级
教材分析 《枚举商品搭配方法》这一课时教材编排了“分析问题,设计算法,编写条件结构的程序,运行,调试程序,说说做做和知识链接”的系列学习活动这一课旨在让学生了解如何利用枚举法编程解决具体问题,引导学生在编写代码时运用枚举法解决生活中的搭配问题语句,进一步减轻代码的复杂性,在生活中运用程序解决实际问题。这些学习对于初中学生来说是非常有必要的,不仅可以增加学生知识,同时也能增强计算机编程能力和科学思维,提高学生信息素养。教材编排合理,教学环节寓教于乐,贴近学生生活实际,符合九年级学生认知特点。。
学习目标 1.信息意识:学习如何利用枚举法编程解决具体问题。2.数字化学习与创新:通过实践活动,掌握运用枚举法解决生活中的搭配问题的方法;能够在实际情境下运用所学知识,解决实际问题。3.计算思维:具备用计算机解决问题的能力。4.信息社会责任:激发对计算机编程的兴趣和热情,将编程运用到生活中,锻炼自身的道德情操和品德修养,培养优秀的价值观和行为准则。
重点 利用枚举法编程解决具体问题
难点 将所学知识结合,编写代码
教学过程
教学环节 教师活动 学生活动 设计意图
导入新课 1.导入:师:枚举法是较常用的算法之一,可对要解决的问题的所有可能情况进行逐一检验,从而找出正确的解。在日常生活中使用枚举法有时会显得比较“笨拙”,花费时间较长,但计算机的高速运算能力保证了枚举法的可行性,而且对应的程序相对简单。在本活动中,我们将利用枚举法编程解决具体问题,感受算法的价值和魅力。 了解本节课学习内容 引入本节课知识激发学生学习兴趣,调动积极性
讲授新课 一、分析问题要解决的问题如下:某客户计划向商店订购 300 千克饼干,饼干有两种规格:大盒5千克一箱,小盒 2 千克一箱。为了便于运输不允许开箱,且客户要求大小盒都必须有,商品可以提供多少种搭配方法 设大盒数量为 x,小盒数量为y,则两者之间应满足的表达式为:x*5+y*2=300且x和y必须是大于等于1的正整数。如果先一一列举大盒数量x,列出x的所有可能性(从1到59,后者的情况为小盒为1).然后判断剩下的饼干用小盒装是否正好装完,即没有余量,也就是(300-5*x)能够整除2若能装完,则算出小盒数量 y。提示板:以上这种算法其实是我们生活中常用的枚举法。枚举法就是按照问题本身的性质一一列举出该问题所有可能的解,并在逐一列举的过程中,检验每个可能解是不是问题的真正解,若是,则采纳这个解,否则抛弃它。解决本问题的枚举思路如下枚举对象:大盒数量x。枚举范围:x>=1且x<=59检验条件:剩下的饼干用小盒装无剩余,即(300-5*x)%2= =0说说做做生活中用枚举法解决问题的情景很常见,比如,忘记一串钥匙中哪一把是大门钥匙。选择生活中某个需要用枚举法解决的问题,并用自然语言或流程图描述其算法二、设计算法枚举法要求将所有可能的答案遍历,往往适合使用循环结构;在遍历的同时,需要检查每一个答案是否满足要求,所以在循环结构中会嵌套一个选择结构。用流程图表示算法三、编写程序猜到正确答案后,程序不再需要执行下一次循环。这时可以使用 break 语句,在循环条件仍然成立的情况下终止循环说说做做尝试画出顺序查找算法的流程图,写出相应程序,比较两种查找算法的不同若将本例的枚举对象改为小盒数量解决本问题的枚举思路如下枚举对象:小盒数量y。枚举范围:y>=1且y<=150检验条件:剩下的饼干用大盒装无剩余,即(300-2*x)%5= =0已知一个矩形的面积,且面积为正整数,求所有可能矩形周长的整数解def find_rectangles(area): rectangles = [] for i in range(1, int(area ** 0.5) + 1): if area % i == 0: length = i width = area // i perimeter = 2 * (length + width) rectangles.append((length, width, perimeter)) return rectanglesarea = int(input("请输入矩形的面积:"))rectangles = find_rectangles(area)print("矩形的周长整数解为:")for length, width, perimeter in rectangles: print(f"长度:{length},宽度:{width},周长:{perimeter}")知识链接 算法的优化求100以内的素数,解决该问题可以采用枚举法,就是一个一个数字去检查该流程图中,判断i是素数这个模块还需细化。判断某个自然数是素数的依据是该数除1和本身外,不能被任何自然数整除因此,可以用一个循环结构的算法,检查 i能否被2至i-1间的自然数整除,算法如下设isPrime=True循环j从2到i-1 如果i能被j整除,则isPrime=False如果isPrime==True,则i为素数输出i优化算法只需要把之前找到的素数全部记录下来每次检查的时候只要检查所有找到的素数是否可以整除i即可。像这样利用问题的特点对算法或者流程的步骤进行简化的过程叫作优化。优化后的算法如下设isPrime=True循环j(范围为之前找到的素数集合 ) 如果i能被j整除,则isPrime=False如果isPrime==True,则i为素数,输出i,且将i加入素数集合j四、运行,调试程序数字化学习:1. 如何将上例中大盒和小盒的搭配结果用列表保存起来 尝试上网学习并参考“知识链接”,完成程序的修改。2.尝试上网学习并参考“知识链接”,了解常见的排序算法。知识链接 列表在Python中,可以用列表存储一系列对象所组成的系列。列表放在【】中表示当想要往列表中添加新的对象时,可以利用 append 函数。列表和用 range 生成的序列一样,在Python 中同样可以用for循环来完成遍历。>>> # 创建空列表样>>> a = [ ]>>> # 在列表中添加一个元素>>> a. append(1)>>> a [1]>>>append 函数的调用是用"."号引出的,表示这个函数是针对 a 这个对象进行操作,是针对列表对象的独有函数。像这样属于某类对象的专有操作函数,叫作对象的方法。求素数问题的 Python 程序如下:#记录已经找到的素数用的列表primes = [ ]#遍历从2到100的所有数字for i in range(2,101): # 检查i是否为素数 isPrime = True for p in primes: if i%p== 0: #如果能被之前的素数整除就不是素数 isPrime = False#将找到的素数输出并存入列表中if isPrime == True : print(1) primes.append(i)单元挑战下列活动按能力要求分成三类,请从这三类活动中依次各选一项去挑战,并按照完成的情况给自己加星。 1.一 个五位数,万位和百位上数字未知,只知道该数是 57 和 67 的倍数,求该数所有的可能性。def find_numbers(): numbers = [] for i in range(10000, 100000): if i % 57 == 0 and i % 67 == 0: numbers.append(i) return numbersnumbers = find_numbers()print("该数的所有可能性为:")for number in numbers: print(number)已知三种水果糖每 500 克价格分别为 10 元、12 元、16元,为糖果店的营业员设计个程序,输入顾客购买的每种糖的重量,计算付款金额。def calculate_payment(weight_1, weight_2, weight_3): price_1 = 10 price_2 = 12 price_3 = 16 payment = (weight_1 * price_1) + (weight_2 * price_2) + (weight_3 * price_3) return paymentweight_1 = float(input("请输入第一种糖的重量(单位:克):"))weight_2 = float(input("请输入第二种糖的重量(单位:克):"))weight_3 = float(input("请输入第三种糖的重量(单位:克):"))payment = calculate_payment(weight_1, weight_2, weight_3)print("付款金额为:", payment, "元") 1.设计一款可供两人玩猜数字的小程序,制定游戏规则,并编程实现start_time = time.time() #记录起始时间guess = None #初始化猜测值timeout = False #判断是否超时 while guess != target_number and not timeout: try: guess = int(input("请输入一个0-9之间的整数(按Enter键):")) if guess < target_number: print("太小了!再试一次...") elif guess > target_number: print("太大了!再试一次...") else: end_time = time.time() #记录结束时间 elapsed_time = round((end_time - start_time), 2) #计算消耗时间 print("恭喜你猜对了!你花费了{}秒完成游戏。".format(elapsed_time)) except ValueError: print("无效的输入,请重新输入一个整数。") if timeout: print("时间已经用完,游戏结束。")2.设计程序,输出 100~200 之间所有的素数import math def is_prime(num): if num <= 1: return False for i in range(2, int(math.sqrt(num)) + 1): if num % i == 0: return False return True for number in range(100, 201): if is_prime(number): print(number)编写程序,求两个正整数的最大公约数import math def find_gcd(a, b): return math.gcd(a, b) num1 = int(input("请输入第一个正整数:"))num2 = int(input("请输入第二个正整数:"))result = find_gcd(num1, num2)print("最大公约数为:", result)2.编写程序,打印1到100之内的整数,但数字中包含7的要跳过for i in range(1, 101): if '7' not in str(i): print(i)知识拓展:python算法的特征1.输入: 算法具有0个或多个输入2.输出: 算法至少有1个或多个输出3.有突性:算法在有限的步骤之后会自动结束而不会无限循环,并且每一人步骤可以在可接受的时间内完成4.确定性: 算法中的每一步都有确定的含义,不会出现二义性5.可行性:算法的每一步都是可行的,也就是说每一步都能够执行有限的次数完成python算法的复杂度1、衡量标准算法在计算机执行中所消耗的时间算法在执行中所占用的资源的大小,如: 内存空间的占用大小算法的易理解性,易实现性算法在计算机执行中消耗的时间跟时间有关的因素数据输入的时间算法编译成可执行程序的时间计算机执行每条指令的时间算法语句重复执行的次数作业布置 请同学们复习本节课学习的内容,用枚举法的方式解决问题,并且用枚举法解决生活中的一些简单问题。 学生理解、思考自主学习反复探索学生完成课后练习知识拓展自主学习,知识拓展,更准确理解课堂内容。单元学习总结,将本单元学习的东西结合运用起来。 将计算机与数学生活联系在一起让学生在反复探索尝试的过程中训练思维方式,理解变量可控的重复执行通过结合所学知识完成练习,拓展延伸学生知识,增加学生知识技能更深层次了解python算法让学生体验Python 编程的强大功能,初步感受用编程技术驾驭计算机高效解决问题。学生巩固复习知识,学以致用。
课堂练习 完成书上的说说做做 学生完成课堂练习 巩固所学知识
课堂小结 1.学习了用枚举法编程解决具体问题2.学会了运用枚举法解决生活中的搭配问题3.复习整合单元内容,梳理所学知识。 学生总结本节课的学习内容 总结概括本节课的学习知识内容
板书 一、分析问题二、设计算法三、编写程序四、运行,调试程序
21世纪教育网 www.21cnjy.com 精品试卷·第 2 页 (共 2 页)
HYPERLINK "http://www.21cnjy.com/" 21世纪教育网(www.21cnjy.com)
同课章节目录