循环语句
在石头剪刀布游戏的最后我们使用了while语句来实现重复判断的功能,接下来我们就来深入研究一下while语句的用法。while语句是为了让代码实现重复执行的效果,值得一提的是Python中还有另一个实现重复执行效果的循环语句for语句,这个我们后面也会讲解到。
基本用法
首先来看一下while语句的用法:
i = 1
while i <= 10:
print('这么简单,我会了!')
i = i + 1
在这个例子中,我们首先设定了一个计数器i并且把初始值设定成了1,while语句后面跟着一个条件:i <= 10,如果判定条件成立的话,则会执行里面的两行代码,如果条件不成立的话,那么while语句就结束了。 更进一步,我们可以把计数器i也打印出来,变成一个报数的程序:
i = 1
while i <= 10:
print('编号:',i)
i = i + 1
我们也可以让报数倒着来,代码如下:
i = 10
while i >0 :
print('编号:',i)
i = i - 1
仔细观察两段代码,能发现几处不同呢? 接下来我们再来看一个例子:计算1+2+3+...+100的结果,相信大家对这个一定很熟悉,这个怎么通过编程来实现呢?执行如下的代码看是不是5050:
sum = 0
n = 1
while n <= 100:
sum = sum + n
n = n + 1
print(sum)
while循环语句可以跟之前学过的if判断语句相结合,比如计算1到100之间所有奇数的和:
sum = 0
n = 1
while n <= 100:
if n%2 == 1:
sum = sum + n
n = n + 1
print(sum)
有些时候,如果代码写得有问题,会让程序陷入“死循环”,也就是永远循环下去。这时可以用Ctrl+C退出程序,或者强制结束Python进程。请试写一个死循环程序。
break
在循环中,break
语句可以提前退出循环。例如,本来要循环打印1~100的数字:
n = 1
while n <= 100:
print(n)
n = n + 1
上面的代码可以打印出1~100。如果要提前结束循环,可以用break语句:
n = 1
while n <= 100:
if n > 10: # 当n = 11时,条件满足,执行break语句
break # break语句会结束当前循环
print(n)
n = n + 1
执行上面的代码可以看到,打印出1~10后,程序结束,可见break
的作用是提前结束循环。
continue
在循环过程中,也可以通过continue
语句,跳过当前的这次循环,直接开始下一次循环。
n = 0
while n < 10:
n = n + 1
print(n)
上面的程序可以打印出1~10。但是,如果我们想只打印奇数,可以用continue语句跳过某些循环:
n = 0
while n < 10:
n = n + 1
if n % 2 == 0: # 如果n是偶数,执行continue语句
continue # continue语句会直接继续下一轮循环,后续的print()语句不会执行
print(n)
执行上面的代码可以看到,打印的不再是1~10,而是1,3,5,7,9。 可见continue
的作用是提前结束本轮循环,并直接开始下一轮循环。
海龟画图
学习了while循环语句之后,我们来结合Python中内置的海龟画图模块来做一些有趣的程序,首先来尝试一下如下的代码,熟悉下海龟画图的基本用法:
import turtle #导入海龟画图模块
turtle.forward(100) #前进100步
turtle.right(90) #向右转90度
turtle.forward(100)
turtle.right(90)
turtle.forward(100)
turtle.right(90)
turtle.forward(100)
turtle.right(90)
turtle.done() #结束画图
通过如上的代码我们就绘制出了一个正方形,那如果想要绘制多个正方形怎么办呢?当然可以复制和粘贴,不过既然学习了while循环语句,我们就要利用它来实现这个效果了,代码如下,试试效果吧:
import turtle #导入海龟画图模块
i = 1
while i<=10:
turtle.forward(100) #前进100步
turtle.right(90) #向右转90度
turtle.forward(100)
turtle.right(90)
turtle.forward(100)
turtle.right(90)
turtle.forward(100)
turtle.right(90)
turtle.right(36)
i = i + 1
turtle.done() #结束画图
这样我们就实现了画10个正方形的效果,如果你觉得速度太慢的话可以添加一行代码调节海龟画图的速度:
turtle.speed(0)
speed是速度的意思,括号里面可以填0~10的整数,从1到10,速度越来越快,0是最快的。另外,你知道怎么改成画36个正方形吗?大胆尝试一下。
细心的同学可能也发现了前进100步和向右转这两行代码重复好好几次,不能优化吗?答案是可以的:
import turtle #导入海龟画图模块
turtle.speed(0)
i = 1
while i<=36:
j = 1
while j<=4:
turtle.forward(100) #前进100步
turtle.right(90) #向右转90度
j = j + 1
turtle.right(10)
i = i + 1
turtle.done() #结束画图
这种写法叫做嵌套重复,也就是两个重复执行的循环语句套在了一起,你能想清楚它的执行逻辑吗?这个很重要,深入思考一下。
最后再给大家提供两个有趣的海龟画图的例子,大家可以试着编程运行一下看看效果。
import turtle
turtle.speed(0)
i = 1
while i<=10:
turtle.forward(60+i*20)
turtle.right(90)
turtle.forward(60+i*20)
turtle.right(90)
turtle.forward(60+i*20)
turtle.right(90)
turtle.forward(60+i*20)
turtle.right(90)
turtle.penup()
turtle.goto(-i*10,i*10)
turtle.pendown()
i = i + 1
turtle.done()
import turtle
turtle.speed(0)
i = 1
while i<=50:
turtle.forward(60+i*10)
turtle.right(90)
turtle.forward(60+i*10)
turtle.right(90)
i = i + 1
turtle.done()