内容正文:
2.4 可以复用的代码(第1课时)
第2单元 编程计算
教科版(2019版) 信息技术(高中)
必修1 数据与计算
1求1!+2!+3!+4!+5!
2求1!+2!+3!+…+100!
阶乘的概念:3!=3*2*1
求1的式子很容易计算,但是随着规模增大,求到100!就比较困难
分治的思想:把一个大的问题分割成很多小的问题,把小的问题解决了,小的问题之和就是大的问题。分治思想有两步,分与合
在这个问题中发现小的问题具有相似性,用函数解决,函数的代码可以重复使用。
定义函数:
函数的代码可以重复使用
函数的组成:函数名、参数、返回值、函数体
函数的分类:
系统函数:函数库中的标准函数,程序设计语言或操作系统中提供的,如print()函数、input()函数
用户自定义函数:用户自己编写的一段程序
def 函数名(参数):
#函数说明
语句或语句组
return 返回值
def factorial(n):
#求n!
s=1
for i in range(2,n+1):
s=s* i
return s
#调用factorial函数
total=factorial(4)
print(total)
同学们试试用这个函数求5!和6!
1!+2!+…+100!
for i in range(1,101):
total+total+factorial(i)
print(i)
#求1!+2!+3!+4!+5!阶乘题目学生作业
? fact(n):#求n!,阶乘factorial,填写定义阶乘的语句
s=? #前面学习了雷加变量初始值0,填写累乘变量初始值
for i in range(?,?):#末尾数字20的求解阶乘范围从1到20,填写起始值和末尾值
s=s*? #每次循环对哪个变量进行累乘
return ? #函数的功能是什么,返回哪个变量的值
#python主程序
total=fact(1)+?+?+?+? #求前5个数的阶乘
print(“求1!+2!+3!+4!+5!=”,?) #输出前5个数的阶乘的和
有6根火柴棒,列出所有能摆出的自然数,要求火柴棒正好用完。
火柴棒问题
f=[6,2,5,5,4,5,6,3,7,6]
0数字用6根火柴棒,用f[0]表示
1. 列出3个可以用6根火柴棒摆放的数字,分别是
、 、 、 、 、 、 。
2. 6根火柴棒能摆放的最大数是 。
0
6
111
111
学生活动
思考1:
思想:数字1用的火柴棒数字最少,尽可能摆出更多个数字,
6根可以摆出3个数字
如何设计算法,让计算机找出这些自然数?
算法分析:
1. 对0-111之间的每一个数进行计算,统计需要的火柴棒根数。
2. 求每个数需要的火柴棒的数,如果满足6根的条件,则输出这个数
第二个步骤的内容是需要重复进行的问题,可以用可重复的代码块函数来表示
思考2:
学生活动
开始
i=0
结束
i需要火
柴棒6根
输出i
i<=111
i=i+1
否
否
是
是
流程图
i是穷举范围的变量
如何计算一个数需要多少根火柴棒呢?
实现方法
1. 将这个数除以10求余,求得个位数;
2. 将这个数除以10取整,去掉个位数;
3. 重复1和2以上步骤直到这个数为0。这样每个位置上的数字都找到了,f=[6,2,5,5,4,5,6,3,7,6],f是一个列表,f[0]=6,表示数字0需要6根火柴棒,每个数字需要的火柴棒数相加,得到这个数需要的总火柴棒数。
思考3:
学生活动
整体思路
这个问题实际就是求0-111这112个数字分别需要用多少根火柴棒摆出来,然后再逐个求比较是不是用6根,如果用6根,
那么把这个数字输出
求112个数字问题,可以分解成112个子问题,112个子问题求出来,这个大的问题就求出来了
这11个问题又是相似的,可以用一个函数求解
先解决这个函数问题
函数的关键功能是是把一个数的每个位置上的数字分离出来
While (n>0):
x=n%10
n=n//10
循环的过程
N x
53 ~
5 3
0 5
这个问题实际就是求0-111这112个数字分别需要用多少根火柴棒摆出来,然后再逐个求比较是不是用6根,如果用6根,那么把这个数字输出
求112个数字问题,可以分解成112个子问题,112个子问题求出来,这个大的问题就求出来了
这11个问题又是相似的,可以用一个函数求解
先解决这个函数问题
函数的关键功能是是把一个数的每