上节回顾
上一节我们学习了Python里的“if选择结构”。它可是python语法里核心之一,计算机之所以聪明很大程度上就在于此,因为只有让计算机能够问问题,它才能够根据回答做出相应的反应。if选择语句主要有三种结构:“if...”,"if...else...","if...elif...else..."希望大家还没有忘记,以后会经常用到,当然经常用到的还有本节要说的“for循环”结构。
本节海报
·本节海报,源自LearnICT.it
反复做一件事情,总会让人烦的!
也许没有什么事情比“反反复复重复一件事”更让人心烦的了!大家应该都有体会,我们睡不着觉的时候的妙招——“数羊”,就是让无穷尽的反复念叨的“1只羊”“2只羊”“3只羊”...让你的脑袋昏昏沉沉从而睡着。程序员写程序时也不想重复,这也让他们心烦得想睡觉,这就是为什么变成语言里有“for循环”语句专门做这种重复的事情(把这些重复的东西交给计算机做吧,反正计算机不怕心烦!)。如果你想在Python中打印5次“hello”,你可能会这么写代码:
>>> print ("hello")
hello
>>> print ("hello")
hello
>>> print ("hello")
hello
>>> print ("hello")
hello
>>> print ("hello")
hello
反正我觉得这样很无聊,幸好我们程序里有“for loop”(for循环)来解决这个问题,让重复的事情简单化,否则我们都不愿意编写程序了。重写上面的任务如下。注意range(0,5)之后要有冒号(:)哦!print()语句之前的黄色色块是空格,它是一定要有的。我们以前反复说过“python的代码块是要缩进的”。
>>> for x in range(0,5):
print("hello")
...
hello
hello
hello
hello
hello
range()是一个函数(或方法),它的功能就是快速产生一串数字,我们以前使用过它,比如range(1,6),就会快速产生“1,2,3,4,5”这几个数。所以在上面的“for x in range(0,5)”这个for循环的意思就是:告诉python,产生一列数字(0,1,2,3,4),让这列的每一个数字依次存储在变量x里面,于是当我们在for循环的代码块里想用x的时候就可以使用了。
>>> for x in range(0,5):
print(x)
print('hello')
hello
1
hello
2
hello
3
hello
4
hello
所以“for循环”真的是太有用了!节省了很多程序员的时间,而且它也是编程语言里最重要的一个语法结构(事实上在某些很大数量的循环情况下,如果没有for循环而只靠程序员一个一个写是根本不现实的)。在for循环里我们不仅可以用“range()”这个函数,也可以用我们已经建好的“列表”,比如我们有一个水果(fruit)列表。
>>> fruit =[ 'apple', 'banana', 'orange', 'peach', 'pearl' ]
>>> for i in fruit :
print(i)
apple
banana
orange
peach
pearl
上面的代码就是说:“将fruit列表中的每一个东西,依次赋值于变量i中(将各个东西每次放到变量i这个“盒子”里),然后打印变量i的内容”如果没有for循环,我们可能要这么写了(是不是要累死了?!):
>>> fruit =[ 'apple', 'banana', 'orange', 'peach', 'pearl' ]
>>> print(fruit[0])
apple
>>> print(fruit[1])
banana
>>> print(fruit[2])
orange
>>> print(fruit[3])
peach
>>> print(fruit[4])
pearl
代码块:缩进是很重要的!
我们在【基础课】里有一节专门讲了“代码块(点击可阅读)”:现在我们学习【编程课】了,所以“代码块”和“缩进”的规则还是要给大家讲清楚的,因为我们在编代码的时候一刻也离不开它。代码块就是在编程的时候我们想要放在一起的几行代码。比如上面的for循环代码块只有1个print(i)的代码行(打印出水果列表里的所有东西),但我们还想买(buy)水果列表里的每个东西,假设我们写了一个“函数”叫做“buy(i)”,于是这个代码块就由两行代码组成了:
>>> for i in fruit :
................buy(i)
................print(i)
上面的代码中的“......”在写的时候要使用“空格键”或“Tab键”代替(实际上看不见的),凡是“对齐”的代码行就属于同一个“代码块”的。如果你想让buy(i)和print(i)属于同一个代码块,它们两个一定要对齐哟,像下面这样缩进就会出现错误:
>>> for i in fruit :
................buy(i)
....................print(i)
所以,当有许多代码的时候,代码块的规则就一定要遵守,比如假设下面就是你写的一个程序,代码块的结构可能长成这样。这里有三个“代码块”,你看到了同一个代码块的都是对齐的,它们之间也是有“逻辑关系”的——也就是:代码块-2属于代码块-1,代码块-3属于代码块-2,所以代码块-2和代码块-1之间要缩进(用空格键或Tab键),代码块-3和代码块-2之间也要缩进,而且这两个缩进长度都要一样啊!(如果前面一个缩进用8个空格键,那后一个缩进也要用8个空格键)。
代码块举例
看我“for循环”派上大用场了!
用turtle(乌龟)画一个正方形,想必大家都应该会写代码了,很简单:“直行--左拐弯--直行--左拐弯--直行--左拐弯--直行--左拐弯”,4个“直行--左拐弯”命令就画出一个正方形了,在没有学习“for循环”之前,你可能会这么写:
>>> import turtle#导入模块
>>>t = turtle.Pen()#调出画笔
>>>t.forward(100)#前进100步
>>>t.left(90)#左转90度
>>>t.forward(100)#前进100步
>>>t.left(90)#左转90度
>>>t.forward(100)#前进100步
>>>t.left(90)#左转90度
>>>t.forward(100)#前进100步
>>>t.left(90)#左转90度
我们有了“for循环”的秘密武器,我们就能够像下面这样改写了,你会发现除了导入模块和显示画笔的两个命令外,只需3行代码就完成了任务!
>>> import turtle#导入模块
>>> t = turtle.Pen()#显示画笔
>>> for x in range(4):
t.forward(100)#前进100步
t.left(90)#左转90度
按照我们讲解的有关代码块的知识:t.forward(100)和t.left(90)是一个代码块(它们顺序执行),同属于for循环,所以t.forward(100)和t.left(90)顺序执行4次,画出了一个正方形。大家仔细体会下(不能光在看哟,编程最重要的是动手,一定要自己在电脑上敲入上面的代码,这样才有深刻的体会)。有了for循环再回来用乌龟作画,我们就能做一些比较“魔幻”的图画,比如下面这个:
正方形螺旋
它的代码也是很简单的3行代码,1个for循环就能实现。怎么做的呢?请看下面的代码,仔细分析它的画图思路,看完之后一定要输入到IDLE里运行试验,不思考、不亲自试验你是根本无法体验它的奇妙的。
程序代码
import turtle
t = turtle.Pen()
t.color('red')
foriin range(200):
t.forward(i)
t.left(90)
你应该知道了,在上面的代码中的for i in range(200)里,变量i依次被赋值为(0,1,2,3,4,..199),因此t.forward(i)的前进的步数也是(0,1,2,3,4,..199),因此乌龟每转一个边就比上一次走的长些,最后的结果就变成了螺旋的正方形了。你体会到了吗?这还只是个开始哦,你可以试验下将上面代码的左转角度t.left(90)变成91度试验下(其他不变),会出现什么效果呢?是不是变成下面这样了?
左转91度效果
它是什么呢?向左转动的“螺旋烟花”?你当然可以随便给它起名字了!其实你还可以大胆的尝试,比如左转角度试下46度试试,61度呢?121度呢?你都可以改下然后运行程序看下你的成果(为什么不是45度?60度?120度?而是46度?61度?121度?因为45度、60度、120度这些出来的都是规则图形,多1度就变成螺旋图形了,当然没有人阻止你试验下!)。
46度
61度
121度
Python玩与学
半大孩的编程思维课
公益|教程|好玩|极客
转载请留言|获得授权方可转载
本平台所使用的图片归相关权利人所有,因客观原因造成不当使用请随时与本平台联系,以协商授权事宜
领取专属 10元无门槛券
私享最新 技术干货