循环语句

在石头剪刀布游戏的最后我们使用了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()           
Last Updated:
Contributors: aibokalv