首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

半大孩边玩边学编程之(九)—for循环

上节回顾

上一节我们学习了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玩与学

半大孩的编程思维课

公益|教程|好玩|极客

转载请留言|获得授权方可转载

本平台所使用的图片归相关权利人所有,因客观原因造成不当使用请随时与本平台联系,以协商授权事宜

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

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券