Logo

郎哥编程

计算从1加到100

2020-03-09 454

现在老师出一道题,相信各位同学都会算,就是求自然数1到100的累加和。


01.png



有些同学可能会使用推土机算法。推土机算法是一种比较笨拙的算法,算法就像推土机一样,再多的土方,都是一铲一铲的来,直至把所有要处理的土方全部处理完毕,求质量不求效率。


02.png


下面是计算从1加到100的推土机算法:
1+2+3+……+99+100 = 5050

03.png


推土机算法是最直接的算法,从1开始一直加到100,同学们只要有足够的认真和耐心,是完全可以完成整个从自然数1到100求累加和计算过程的。

04.png


可以把算式:
1+2+3+……+99+100
利用加法结合律,写成如下的算式:
(1+100)+(2+99)+……+(49+52)+(50+51)

05.png


在上面的算式中,利用加法结合律,可以将1与100、2与99、3与97、……、49与52、50与51进行两两组合相加,这样的两两组合一共有50对。再仔细观察,我们发现每一组合的两个数的和都等于101。

06.png


基于上面的观察结果,可以把上面的算式改写为:
(1+100)* 50 = 5050
这个算式就是从1加到100的简便算法,计算效率比推土机算法效率要快得多。

07.png

08.png


使用Python语言来求自然数1到100的累加和,也涉及到是使用推土机算法还是简便算法。如果使用简便算法,程序代码非常简单。

09.png


10.png


在Python代码中,写如下的算式,显然不是好的方式。一行代码过长,既不方便阅读,代码结构也不清晰。

11.png


案例02代码中的省略号表示从4累加到98。
可以考虑声明一个sum变量,sum变量的初始值为0,让sum变量从1开始,一直加到100。加法算式可以使用“+=”运算符,“+=”运算符将运算符左边的操作数与右边操作数的值相加后,再赋值给运算符左边的操作数。

12.png


上述语句执行后,sum的值为3,执行过程为:

(1)sum初始值为0;

(2)执行sum+=1语句,sum自身的值加上1再赋值给sum,此时sum的值为1;

(3)执行sum+=2语句,sum自身的值加上2再赋值给sum,此时sum的值为3。

计算从1加到100的推土机算法流程图:


13.png


上面流程图的计算过程并没有完全绘制出来,仅绘制了sum+1和sum+100的过程步骤,用省略号“……”表示了sum从2加到99的过程步骤。这是因为绘制这么多的过程步骤太麻烦了,既费时间又没有多大用处,流程图也不直观。

有了流程图,就要开始写Python代码了。流程图可以用省略号表示sum从2加到99的过程步骤,但在代码中不能忽略,需要写100条类似下面的语句:

14.png


没办法,我还是用了省略号“……”,不然正在阅读的你都不同意。

15.png


Python语言提供了一种循环结构,可以快速有效地执行重复性操作,使用循环结构可以解决上面要写100条重复语句的问题。

循环结构是程序中一种很重要的结构。其特点是,在给定条件成立时,重复执行语句块(一个语句块包含多条语句,也可以是一条语句),直到条件不成立为止。给定的条件称为循环条件,反复执行的语句块称为循环体。

16.png


Python提供了for循环和while循环两种循环结构体,这节课主要讲述for循环结构体,并使用for循环结构求自然数1到100的累加和。

17.png


设sum变量的初始值为0,求自然数1到100的累加和,需要循环执行100条下面的语句:
sum += n

18.png


其中,sum是存储累加和的变量,n的取值范围是自然数1到100,初始值为1,每次循环递增1。例如:
第1次循环时,n的值为1。
第2次循环时,n的值为2。
……

第100次循环时,n的值为100。


19.png


Python的for循环结构,通过一个计数器来控制循环,计数器从一个数字开始计数到另一个数字,在计数过程中,每增加一次计数就执行一次循环,一旦到达最后的数字或者某个条件不再满足就立刻退出循环。

for循环结构的语法为:

20.png


其中,for……in是for循环结构的语句,在for和in之间是计数变量,在in后面是range函数,用于确定计数变量的取值范围。语句块是for循环结构的循环体,有多条或一条语句组成。

计数变量用来控制循环的执行次数,每执行一次循环,计数变量就增加一个步长,步长由后面的range函数确定,步长就是计数变量每循环一次增加的数值。如步长为1,每循环一次,计数变量就增加1;步长为2,每循环一次,计数变量就增加2。

21.png


in表示计数变量的值要在range函数产生的整数序列内,一个整数序列就是一组有序的整数,如1、2、3、4、5、6是有6个数的整数序列;1、5、10、15、20是有5个数的整数序列。计数变量及其自增后的值必须要在range函数产生的整数序列内。

22.png


range函数可以产生一个整数序列,和前面介绍的print函数一样,在使用range函数时需要传入一些值。print函数传入的是要输出的字符串,range函数要传入的是待产生整数序列的起始值、结束值以及步长。
例如:如果要产生1、5、10、15、20的整数序列,要传入range函数的起始值是1,结束值是25,步长是5。

23.png


range函数的语法如下:

24.png

其中,start、end、step为要传入的值,这些值也称为函数参数,range函数需要传入三个参数,分别是start、end、step。statr为整数序列的起始值,end为整数序列的结束值,在生成的整数序列中,不包含结束值。step为整数序列中递增的步长,默认为1,如果采用默认值,step参数可以省略。

了解了for循环结构,阿萌准备采用for循环结构来实现从自然数1到100的累加和,他先绘制了流程图。

25.png


流程图的sum变量用于存储自然数1到100的累加和。计数变量用来控制循环变量的执行次数,每执行一次循环,计数变量就增加一个步长,步长由后面的range函数确定。

计数变量的初始值为range函数产生的整数序列的第一个值。条件判断用于判断计数变量的值是否在整数序列内:如果计数变量的值在整数序列内,就执行循环体中的语句,即sum+=计数变量;如果计数变量的值不在整数序列内,程序就退出for循环结构,并输出sum变量。

有了流程图,阿萌开始编写代码了。他启动Python IDLE,在IDLE的Shell窗口新建一个代码文件,在新建的代码编辑窗口编写代码。

26.png


代码解读
在上面的代码中,首先声明sum变量并初始化为0,然后使用for循环语句计算自然数1到100的累加和。

在for语句中,i为循环计数变量,range函数产生1、2、3、……、100的整数序列,range函数的start参数值为1,end参数值为101,因为range函数在产生的整数序列中不包含end,因此end的值要比预定循环结束的值大一个步长,step参数值采用默认的1,因此无需传入step参数。

for语句的循环体是语句:
sum += i

该语句的i变量是for语句的循环计数变量,i的初始值为整数序列中的第一个值,也就是数值1。以后的每次循环i的数值都会增加一个步长,这里的步长为数值1,因此循环计数变量i会从数值1,按照1的步长,逐渐自增到100。

代码编写完成,阿萌把代码保存到D盘的Python目录,保存的文件名称是forsample.py。

27.png


课程小结

这节课我们主要讲述了for循环结构,当我们在编写程序的过程中,需要编写较多的重复语句时,就要考虑使用for循环结构。在使用for循环语句时,需要使用range函数产生一个整数序列,只要循环计数变量的值在这个整数序列中,就一直执行循环,直至循环计数变量的值不在整数序列中,循环才结束。

上机练习

(1)编写一个程序,使用for循环结构求从自然数1开始,一直乘到20的乘积。即:1*2*3*……*20。
(2)编写一个程序,用for循环输出自然数1到100之间的所有偶数。
提示:能被2整除的数为偶数,在Python语言中可以用取余运算符%来判断某个数值是否是偶数。例如 :a%2的运算结果如果是0,则a为偶数。

代码在线纠错(通义千问 qwen-max)

支持粘贴多个代码文件,提交后由阿里云通义千问自动分析代码漏洞、语法错误、逻辑问题并给出修改建议。
您已解锁 AI 代码纠错功能,可正常使用!

评论区

登录 后发表评论
暂无评论