第5章奋斗不止——让计算机重复工作 人生中最困难者,莫过于选择。 ——莫尔 决定你是什么的,不是你拥有的能力,而是你的选择。 ——杨澜 “小古文怎么学?粗知大意,背下来再说!”这是全国特级教师于永正教大家的学习方法。波波学习小古文时就用此方法,当他不会背的时候,就读啊,读啊,读啊,读啊…… 当“不会背”这个条件成立时,波波就会一直读下去,波波真是一个有毅力的孩子啊! 5.1还有没有完啊——while语句 今天一早妈妈问: “波波,想不想去动物园啊?” 波波: “想啊想啊,今天就去好不好?” 妈妈: “好啊,但是有个条件。” 波波: “怎么又有条件啊?好吧,你说吧。” 妈妈: “写自己的小名波波一百遍。” 波波: “啊?!一百遍啊,好啊,为了动物园我拼了,马上动手写起来。” 妈妈: “第几遍了?” 波波: “这是第1遍。” 妈妈: “第几遍了?” 波波: “这是第2遍。” …… 在最好的年纪学Python ——小学生趣味编程 第5章奋斗不止——让计算机重复工作 0 0 后来波波和妈妈都数不清了,妈妈提议让Python来完成这个重复的工作,于是妈妈写下了如下所示的代码,立马整个过程变得清晰明朗了。 cnt=1 while cnt<=100: print('妈妈: 第几遍了?') print('波波: 这是第',cnt,'遍') cnt=cnt+1 运行波波妈妈的程序,结果如图51所示,因为篇幅有限,图51只截取了一部分,实际上要重复100遍。 图51波波妈妈的程序运行结果 妈妈在此处使用while语句构造了一种循环结构,将重复单调的工作简单化了。while语句的循环结构一般形式如下: while循环条件判断: #满足条件时,进行此处操作 其执行思路可以由图52来表示。 图52波波要写100遍名字的流程图 while语句首先判断菱形框中的条件是否为True(真),当条件为True时,执行方框中的程序段,人们将这个程序段称为循环体。循环体执行一次后,循环控制变量即波波写的遍数要增加1,程序又转回去判断菱形框中的条件,直到条件为False(假)时,循环结束,妈妈带波波去动物园。 5.2第二种强大的循环语句——for语句 妈妈: “波波,是不是觉得循环语句很实用也很有趣啊?” 波波: “是啊,好神奇!” 妈妈: “其实,循环结构还有另一个语句——for语句。” 一眨眼的工夫妈妈就用for语句实现了上述循环结构,代码如下。 for cnt in range(1,101): print('妈妈:第几遍了?') print('波波:这是第',cnt,'遍') 运行结果与图51类似,但是波波对比while语句和for语句两种代码发现,for语句的代码更简单,少了两行代码。 这是因为for语句使用了range()。range(1,101)会构造一个序列,程序中cnt是一个循环变量,它的取值依次为1,2,…,100,对应range(1,101)中的100个元素,当cnt取值为101时,循环结束。这就是Python为大家准备的能遍历序列的for循环语句。该语句可以挨个对序列中的每个元素进行相同的操作,其一般形式如下: for循环变量 in 序列 #执行循环体 5.3该出手时就出手——break和continue 波波一边写着自己的名字一边想,总是这样重复写也不是办法,如何跟妈妈谈判呢? 波波: “妈妈,我觉得条件可以修改一下,假如我很认真地写自己的名字,写得很好看,那么就可以不用写100遍。当然如果你认为我某次的字写得太丑,这一次也可以不算数。” 妈妈思索了一会儿,点头答应了。当然“证据”也要相应修改,就以while语句为例吧,修改为如下代码。 cnt=1 while cnt<=100: print('妈妈:第几遍了?') print('波波:这是第',cnt,'遍') 妈妈满意=input('妈妈对我写的名字满意?(Y代表满意,N代表不满意,O代表勉强可以):') if 妈妈满意=='Y': print('妈妈满意了,波波不用再写了') break elif 妈妈满意=='N': print('写得太难看,重写吧') continue else: cnt=cnt+1 运行程序,如果妈妈对波波第一遍写的名字就满意了,波波就不用写后面的99遍了,结果如图53所示。 图53加入选择判断语句后的程序运行结果 妈妈巧妙地借助break和continue,听起来复杂的条件,由Python来表示就简单了。break和continue都可以结束循环,但是二者之间的差别还是很大的,请看波波的小贴士。 小贴士 (1) continue语句用来结束本次循环,立即开始下一次循环。 (2) break语句用来结束整个循环。 5.4需要掌握的单词 while当……时候 break结束 continue继续 in在……之中 range范围 for对于 5.5动动脑 (1) 请用while语句实现: 计算1~100所有整数的和。 (2) 请用for语句实现: 打印字符A~Z。 (3) 阅读以下程序,写出运行结果。 n=1 while n<10: if n==7: continue else: print(n) n=n+1 运行结果是。 (4) 阅读以下程序,写出运行结果。 for i in range(1,101): if i%2==0: print(i) 运行结果是。 (5) 阅读以下程序,写出运行结果。 cnt=1 while cnt<3: print("hello Python!") cnt=cnt+1 运行结果是。 (6) 阅读以下程序,写出运行结果。 while True: print("hello Python!") 运行结果是。