半大孩边玩边学编程之(八)—用for循环做有用的事情

Python玩与学好玩的编程及思维训练

点蓝字

上节回顾

上节我们学习了如何让计算机循环执行一个代码块的方法——采用for loop(for循环)。话说有了for循环,可是让程序员的手省了不少劲儿,不然想象下如果让你写1000个重复的语句肯定会疯掉的。在学习了“乌龟画画”之后,如果用for循环指挥乌龟就会画出更加酷炫的图案!

1

经过上节讲述,相信大家对for loop(for循环)有了一定的了解。首先总结下for循环的:它的基本格式是下图这样的。“临时变量”你可以取任何你喜欢的名字,x,y,i,name这些名字都可以;“列表和字符串”这块其实还可以放其他的东西,比如range()函数,字典(我们还没有讲呢)什么的都可以;后面的冒号千万不要忘了。下面的“循环执行代码块”要缩进千万不要忘记。

for循环基本结构

当我们写下上图中的“for... in ...”后,计算机替我们做了些什么呢?就是“临时变量”遍历“列表或字符串”,我用的“遍历”这个词,意思就是“列表或字符串”中的值依次赋给“临时变量”,原理就像下图一样:临时变量i会依次“装入”列表aList中的a,b和c。

本节我们会讲点稍微复杂点的for循环例子以及用for循环完成一些比较有用的任务。要说“复杂点”莫过于多层for循环了。这里我假设你已经学习了上节,知道了“代码块”的层次隶属关系,不过不十分了解也没有关系,一点点体会,看完本节你可能就会豁然开朗了。先看一个双层for循环的例子:

程序代码·1

mylist = ['a','b','c'] ①

for i in mylist: ②

print(i) ③

for j in mylist: ④

print(j) ⑤

大家一看上面代码块的缩进关系,就能得出以下结论:②是第一层for循环开始之处,下面的几行代码都是属于它的(③④⑤顺序执行)。我们注意到,除了代码③(打印列表里的内容)之外,代码④处又有了“第二层for循环”,代码⑤是第二层for循环要执行的内容:再次打印列表里的内容。

所以不知大家是否能看出程序输出什么吗?它会打印mylist列表里的3个字母,但是打印几次呢?我们知道,第一层for循环②会遍历整个列表(注意我用“遍历”这个词,以后也会经常用到,就是列表里的东西一个接一个的依次赋给变量i的意思),代码③处打印出列表内容(依次为'a','b','c'),但是当刚刚打印出'a'之后,该执行第二层for循环④了,又要执行打印列表的任务(⑤处代码执行后打印出'a','b','c')。这时候又该执行第一层for循环了,代码③打印'b',然后又要执行第二层for循环④了,再次执行打印列表的任务(⑤处代码执行后打印出'a','b','c'),依次类推。因此最后输出结果是:先输出‘a’之后跟着'a','b','c',然后输出‘b’之后跟着输出'a','b','c',然后在输出‘c’之后跟着输出'a','b','c'。将上述代码敲进你的IDLE里运行看下结果是不是这样呢?一次想不明白没有关系,小脑瓜要多运转才能更灵活。

双层for循环的输出结果

2

单单用for循环打印一些数字啊,字母啊,好像没有什么实际的用途。还记得【编程课第3节:有用的计算器】里说的那个案例吗?你每周干家务活得5块零花钱,你每周给一幢楼的所有单元送牛奶,又挣30元,你每周买冰激凌吃花10元,那你一年能挣多少钱呢?你一年挣的钱是:

程序代码·2

>>>(5 + 30 -10 )* 52

1300

你一周的收入为(5+30-10),再乘以52周(一年有52周你应该知道)就是你一年的总收入了!可能你不止只想看到年底你一共有多少钱,而是想看下你每周逐渐积累多少钱,这个时候for循环就有用武之地了。但首先,我们要先定义一些变量,然后分别装入上面的数儿。

程序代码·3

>>>jia_wu = 5 #指“家务”

>>>song_nai = 30 #指“送奶”

>>>hua_fei = 10 #指“花费”

所以我们用变量的方法同样可以计算出一年的收入:

程序代码·4

>>>(jia_wu + song_nai - hua_fei)* 52

1300

要想看下我逐个星期累积的钱,就得再建一个变量,比如叫这个变量为leiji(“累积”),大家想想,最最开始的时候,你一分钱也没有,所以leiji = 0,然后用for循环计算:

程序代码·5

#①>>>leiji = 0

#②>>>for x in range(1,53):

#③leiji = leiji +(jia_wu + song_nai - hua_fei)

#④print ( 'week % s = % s' %(x,leiji) )

for循环里的range()函数要写成range(1,53),这样变量x就会依次装入1,2,3,...52了。for循环执行的是③和④组成的代码块,代码③可能有点费解,不过我们可以这么想:leiji就像一个银行账户(最开始的时候是0元),第一周的时候你干家务挣的钱加上送奶的钱再减去消费的钱,就是你第一周累积的钱leiji(存银行里)了。你第二周的钱是在你已经存的钱(leiji)的基础上再加上干家务挣的钱加上送奶的钱再减去消费的钱,再次存到“银行(变量leiji)”里,依次类推。所以理解变量leiji是很关键的,它的意思是:每周用当前累积的钱替换变量leiji原来的值。运行程序的结果是这样的:

运行结果

week 1 = 25 #第1周积累的钱

week 2 = 50#第2周积累的钱

week 3 = 75#第3周积累的钱

week 4 = 100#第4周积累的钱

week 5 = 125#第5周积累的钱

week 6 = 150#第6周积累的钱

.

.

.

week 52 = 1300#第52周积累的钱

上面第④行的print语句稍显复杂,我们还没有讲过,它是“制式打印”的一种方式之一。现在不明白并无大碍,打印的结果已经给你们了,就是那样子的。是不是有些迷糊?没有关系。难理解的就是上面的变量leiji了,对于i = i + 1这样的“变量的自加”是程序设计中经常用到的概念:先计算等号右面的值,然后再赋给左面的变量,如果你理解了下面的示例程序,你就明白了上面费了老大劲的讲解了:

程序代码·6

>>>i = 0

>>>for x in range(5):

i = i + 1 #变量自加

print(i)

----------------------------运行结果

1

2

3

4

5

光看不试永远也没有切身体会的。编程写代码更是如此。所以上述代码都需要你敲入计算机里,自己查看运行结果,另外当你不明白一些细节的时候,你可以写一个“验证”程序(比如上面的变量自加),只要一测试就知道它的原理了!

看完本节再看这张图——晕了

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180320G1GP0A00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券