Day 7 : 回圈-用来解决重复的事情

今天要来学习程序语言中非常重要的一个概念(功能)-回圈,回圈到底可以拿来干嘛呢?先来看个例子:
如果我想print出1到5的数字的话,没学过回圈的人会这样打:

print(1)
print(2)
print(3)
print(4)
print(5)

这样有点太麻烦了,如果你今天要print1到1000,岂不是要打1000行?所以便有了回圈的诞生。
回圈的概念通常都是,当你符合特定条件时,会一直重复做回圈内的事情,直到条件不符合,便会跳出回圈。
Python中主要有两种回圈,我们先从for开始讲起:

For回圈

for主要是以范围来作为判断条件,语法格式如下:

for 变数 in 范围:
	要做的事情

照惯例直接上范例,比较好理解:

for i in range(1,6,1):
    print(i) #1 2 3 4 5

上图的例子会print出1到5。

先来解释一下range的用法,range顾名思义就是"范围",range中第一个放的值是初值,第二个值是末值,第三个值是步数,中间都用逗号隔开。像上图的例子,范围就是1到6,步数为1,因此,程序流程是这样的:
i=1 ⇒ print(i) ⇒ i=2 ⇒ print(i) ⇒ i=3 ⇒ print(i) ⇒ i=4 ⇒ print(i) ⇒ i=5 ⇒ print(i)
ㄟ你问为甚麽没有print出6,那是因为在range的末值为6,所以回圈判断不会执行到6,会减1。
这种回圈也可以用变数替代,让我们看看别的例子:

a = 10
for i in range(a):
    print(i) #0 1 2 3 4 5 6 7 8 9
#注意:若没有初值将预设为从0开始,没有步数会预设为1

这个例子的范围为a,也就是10。

While回圈

while主要是以条件来作为判断条件,可以把它想像成是一种会重复执行的if,语法格式如下:

while 条件:
	要做的事情

Ex:

a=0
while a<3:
    print(a) #0 1 2
    a = a+1 

我们定义条件为a<3,所以当a<3时会重复执行回圈,要做的事情为print出a以及将a的值加1,所以a每做一次回圈就会加1,直到大於等於3不符合条件跳出回圈。

从上面这堆例子可以发现回圈有几个重要的点要记住:

  • 回圈中一定要缩排
  • 回圈条件式後方一定要有冒号

这两点非常重要,没做到一定会有报错。

巢状回圈

回圈中有个用法叫做巢状回圈,其实就只是将回圈一层一层的包覆执行而已,如下:
https://ithelp.ithome.com.tw/upload/images/20210920/20138060l4Up4XsKui.png
程序流程是这样的:
i=0 ⇒ k=0 ⇒ print(i,k) ⇒ k=1 ⇒ print(i,k) ⇒ k=2 ⇒ print(i,k) ⇒ i=1 ⇒ k=0 ⇒ print(i,k) ⇒ k=1 ⇒ print(i,k)...........

break&continue

最後来讲讲break跟continue吧,这两个功能有点像,所以放在一起讲。

遇到break会直接中断回圈,break之後的程序都不会执行,范例如下:

for i in range(5):
    if i ==2:
        break
    print(i) #只会输出0 1

在范围为5的回圈内,我写了一个判断式判断,若i=2时,就执行break,所以输出完0,1後,i =2,break,因此不会执行第三次的print(i),并且直接结束回圈。

遇到continue不会中断回圈,continue之後的程序都不会执行,有点像跳过某一个条件的感觉,范例如下:

for i in range(5):
    if i ==2:
        continue
    print(i) #只会输出0 1 3 4

上面虽然跟brerak一样会不执行第三次的ptint(i),可是因为回圈不会中断的特性,所以,回圈会继续执行直到超出回圈的范围5。

回圈的介绍就到这边结束ㄅ


<<:  当责:概念篇

>>:  Day5 - LINE 官方帐号图文选单

[Day4] 执行环境与执行堆叠

在昨天内容中可以知道,JavaScript 采用了静态作用域,函式在定义时就已经确定作用域,而在产生...

Golang - 不用for回圈,利用递回反转字串

as title 这是之前去面试的考题 想了很久,不过感觉不是最佳解 做个纪录 期待有大神看到可以提...

Day 18 - 取得所有Contract程序范例

使用Shioaji API,第一次接触的人最常遇到的问题就是要如何抓所有的股票资料 在Day 03 ...

Day 19 信号

Kernel里面的这个信号(signal)功能,主要是针对软件的部分,软件如果在处理过程中发生中断的...

Day21:21 - 结帐服务(5) - 後端 - 结帐 X PayPal Python Checkout SDK

Salom,我是Charlie! 在Day20的时候我们完成了createOrder跟Capture...