py 满足条件退出for循环_Python真好玩:循环的力量(下)

单击上面的专辑,每天5分钟,从零开始学Python。

0dee451aac801a71bf7f280734d20433.png

While 循环语句

Python语言提供了while和for循环结构,用于编制循环语句。在前2次课程中,我们学习了for循环语句,这次课,我们来看看while循环语句。

Python编程中 while 语句用于循环执行程序,即在某条件下,循环执行某段程序,以处理需要重复处理的相同任务。其基本形式为:

while 判断条件:

执行语句……

判断条件是循环执行的条件,每次循环执行前,都要执行条件表达式,对条件进行判断,当条件为真时则执行循环体语句,否则退出循环,如果条件表达式在循环开始时就为假,则不执行循环语句,直接退出循环。

执行语句可以是单个语句或语句块。判断条件可以是任何表达式,任何非零、或非空(null)的值均为true。

执行流程图如下:

81a1f0273433f8f398762e94599ed4ea.png

用一个例子来说明:请打印输出1到10以内所有的奇数。

启动IDLE,新建py文件,代码输入如下:

num = 1

while num < 10:

    print (num)

    num += 2

既然是打印10以内所有的奇数,所以打印输出的最小值是1,最大值是9.

在这段代码中,我们首先定义了一个整数变量num,赋予数值1。

我们将num < 10作为判断条件,当num当前值小于10的时候,执行后续的代码块。

代码块由2行代码组成,第一行是输出当前num值,第二行 num += 2 等同于 num = num +2。所以每一次循环,都要打印当前的num值,然后将num加上2.

第一次条件判断:

num=1,num<10条件语句判断为true,print函数输出num的当前值(1),将num+2变成3,然后进入下一次条件判断。

第二次条件判断:

num=3,num<10条件语句判断为true,print函数输出num的当前值(3),将num+2变成5,然后进入下一次条件判断。

以此类推,直到num=9,print函数输出num的当前值(9),将num+2变成11,然后进入下一次条件判断。条件不满足,退出循环。

输出结果:

98f050a7b6917c69185cb070b4660beb.png

再来完成一个练习,这次,我们需要计算1+2+3+……+100的和。

思考,这里我们有2个变量,一个是当前加到第几个数字了,一个是当前数字和是多少。循环的判断条件应该是当前要加的数字小于101。思考一下,代码如何写呢?

cf34b2504b5d901c606cc1d99eb681bd.png

代码如下:

num = 1

total = 0

while num < 101:

    total += num

    num += 1

print("100以内整数的和为:%d" %total)

运行结果如下:

ad38107e2ce7413d4fc733483d2c342e.png

这里,total += num等同于total = total + num

一开始total和为0,每一次循环,都是之前的和,加上当前的num值。

num+=1 等同于 num = num +1, 所以,每一次循环,num都会加1。

一开始,num = 1, 满足判断条件num<101,执行代码块, total = total + num,total当前值为0, num=1, 所以total等于0+1变成1。num变成1=1等于2,满足条件判断,进行第二次循环。

在第二次循环中,新的total值= 当前total值(1)+ 当前num值(2),所以total = 1+2 =3, 而num变成2+1=3,满足条件判断,进入下一次循环。

以此类推:

total一直等于之前num的和加上当前num的值,所以相当于1+2+3+……+99+100,而此时num=101,不满足条件判断,退出了循环。

还记得我们最开始说的那个印度国王的故事吗?

cfc91b7930c87244749e6e4f57b97841.png

在印度有一个古老的传说:舍罕王打算奖赏国际象棋的发明人——宰相西萨·班·达依尔。国王问他想要什么,他对国王说:“陛下,请您在这张棋盘的第1个小格里,赏给我1粒麦子,在第2个小格里给2粒,第3小格给4粒,以后每一小格都比前一小格加一倍。请您把这样摆满棋盘上所有的64格的麦粒,都赏给您的仆人吧!”国王觉得这要求太容易满足了,就命令给他这些麦粒。当人们把一袋一袋的麦子搬来开始计数时,国王才发现:就是把全印度甚至全世界的麦粒全拿来,也满足不了那位宰相的要求。那么,宰相要求得到的麦粒到底有多少呢?

当时我们计算过:

第一天  1粒

第二天  1*2=2粒    2的(2-1)次方

第三天  2*2=4粒    2的(3-1)次方

第四天  2*2*2=8粒  2的(4-1)次方

。。。。。。以此类推

第六十四天国王需要摆2的(64-1)次方颗麦粒。

那么,如何通过编程来计算麦粒的总和呢?

我们来理一下思路。

项目分析:

国际象棋有8行8列共64格,

第1个格子放1粒麦子,第2个格子放2粒麦子,

以后每格都比前面格子数量多一倍,

求麦子总数。

循环之前,我们都应当考虑有什么需要变量?

#定义一个变量total来保存总的麦子数量,初始值为0

total =0

#定义一个变量i,循环1-64,来代表每一个格子

i =1

#假设每个格子中的麦子数量为x,初始也是1

x =1

循环的进入和退出条件。

循环是从第一个格子,循环到第64个格子,因为包含第64个格子本身,所以循环条件肯定是<=64,如果是<64,那循环到第63个格子就结束了:

while i<=64:

循环的判断条件定义好了,现在考虑真正的计算,也就是循环体的部分:

#总数累计上这一个格子的麦粒数

total = total + x

(你也可以写成total += x)

#下一个格子

i = i + 1

(你也可以写成 i += 1 )

#下一个格子的麦粒数是这一个格子的2倍

x = x*2

(你也可以写成 x *= 2 )

最后的结果是什么

#显示结果

print("64个格子,总的麦粒数量为:",total)

 全部代码看一遍

e1031693cb6ec9cdb32decab6abc7c97.png

执行结果为

e45dc4160fbecbcc3c600a97ed9cf71b.png

达依尔索要的麦粒数目实际上是天文数字,总数将是一个十九位数,折算重量约为2000多亿吨,即使现代,全球小麦的年产量也不过是数亿吨。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值