---
# System prepended metadata

title: wk05_1005_迴圈
tags: [python]

---

{%hackmd @themes/orangeheart %}
## wk05_1005_迴圈 
### 醫放三 B1003210 應雨岑

1. Range函式
2. for

## 今日課程內容
<pre>
4.1  range 函式
    -認識 range 函式
    -range 函式的語法
4.2  for 迴圈
    -巢狀 for 迴圈
    -break 命令
    -continue 命令
4.3 while 迴圈
</pre>
## NOTE
<pre>
串列list用中括弧括起來
list(range(1,10,1))  #從1開始做到10，但10沒有執行，最後一個1是間隔數

for和其他語法(if,else,elif)一樣，他同樣也是需要用到:還有縮排來寫程式
可以使用巢狀for
</pre>

## [ INCLASS PRACTICE ]
```python
#方法一
print("*")
print("**")
print("***")
print("****")
print("******")
#方法二
print("*"*1)
print("*"*2)
print("*"*3)
print("*"*4)
print("*"*5)
#方法三       for 迴圈
for i in [1,3,5,7,9]:
    print(":) "*i)
    print(":( "*(i+1))

```

    *
    **
    ***
    ****
    ******
    *
    **
    ***
    ****
    *****
    :) 
    :( :( 
    :) :) :) 
    :( :( :( :( 
    :) :) :) :) :) 
    :( :( :( :( :( :( 
    :) :) :) :) :) :) :) 
    :( :( :( :( :( :( :( :( 
    :) :) :) :) :) :) :) :) :) 
    :( :( :( :( :( :( :( :( :( :( 
    


```python
a="*"
b=500
print(a*b)
```

    ********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************
    


```python
c1="me"
c2="A"
c3="B"
c4="D"
c=["me", "A", "B", "D"]  #串列list用中括弧括起來

print(c1,c2,c3,c4)
print(c)
```

    me A B D
    ['me', 'A', 'B', 'D']
    


```python
a=list(range(10))  #從0開始顯示10個數字
b=list(range(1,10,1))  #從1開始做到10，但10沒有執行，最後一個1是間隔數
print(a)
print(b)

for i in range(1,11):
    print("$"*i)
```

    [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
    [1, 2, 3, 4, 5, 6, 7, 8, 9]
    $
    $$
    $$$
    $$$$
    $$$$$
    $$$$$$
    $$$$$$$
    $$$$$$$$
    $$$$$$$$$
    $$$$$$$$$$
    


```python
#未使用迴圈
n=10
ttl=1
ttl=ttl+2
ttl=ttl+3
ttl=ttl+4
ttl=ttl+5
ttl=ttl+6
ttl=ttl+7
ttl=ttl+8
ttl=ttl+9
ttl=ttl+10
print(ttl)

#使用迴圈
n=int(input("輸入迴圈幾次?"))
t=0
for i in range(1,n+1):
    t=t+i
print(t)

#
tt=0
for i in range(1,10001,2):
    tt=i+tt
print(tt)

#單數
tt=0
for i in range(1,11,2):
     tt=i+tt
print(tt)

#雙數
ttt=0
for i in range(2,11,2):
     ttt=i+ttt
print(ttt)

```

    55
    輸入迴圈幾次?10
    55
    25000000
    25
    30
    


```python
#要1-100，3,5的倍數做加總
tttt=0
for i in range(1,10001):
    if i%3==0 or i%5==0:
        tttt+=i
print(tttt)

#使用者輸入
range1=int(input("請輸入範圍"))
a1=int(input("請輸入要被整除的數1"))
a2=int(input("請輸入要被整除的數2"))
tttt=0
for i in range(1,range1+1):
    if i%a1==0 or i%a2==0:
        tttt+=i
print(tttt)
```

    23341668
    請輸入範圍10000
    請輸入要被整除的數13
    請輸入要被整除的數25
    23341668
    


```python
a=2
b=9
for j in range(2,9+1):
    print("這是",j,"的乘法")

for i in range(1,b+1):
    print(a,"*",i,"=",a*i)
  #  print(i,a,b)
```

    這是 2 的乘法
    這是 3 的乘法
    這是 4 的乘法
    這是 5 的乘法
    這是 6 的乘法
    這是 7 的乘法
    這是 8 的乘法
    這是 9 的乘法
    2 * 1 = 2
    2 * 2 = 4
    2 * 3 = 6
    2 * 4 = 8
    2 * 5 = 10
    2 * 6 = 12
    2 * 7 = 14
    2 * 8 = 16
    2 * 9 = 18
    


```python
a=2
b=9
for j in range(2,9+1):
    print("這是",j,"的乘法")
    for i in range(1,b+1):
        print(j,"*",i,"=",j*i)

```

    這是 2 的乘法
    2 * 1 = 2
    2 * 2 = 4
    2 * 3 = 6
    2 * 4 = 8
    2 * 5 = 10
    2 * 6 = 12
    2 * 7 = 14
    2 * 8 = 16
    2 * 9 = 18
    這是 3 的乘法
    3 * 1 = 3
    3 * 2 = 6
    3 * 3 = 9
    3 * 4 = 12
    3 * 5 = 15
    3 * 6 = 18
    3 * 7 = 21
    3 * 8 = 24
    3 * 9 = 27
    這是 4 的乘法
    4 * 1 = 4
    4 * 2 = 8
    4 * 3 = 12
    4 * 4 = 16
    4 * 5 = 20
    4 * 6 = 24
    4 * 7 = 28
    4 * 8 = 32
    4 * 9 = 36
    這是 5 的乘法
    5 * 1 = 5
    5 * 2 = 10
    5 * 3 = 15
    5 * 4 = 20
    5 * 5 = 25
    5 * 6 = 30
    5 * 7 = 35
    5 * 8 = 40
    5 * 9 = 45
    這是 6 的乘法
    6 * 1 = 6
    6 * 2 = 12
    6 * 3 = 18
    6 * 4 = 24
    6 * 5 = 30
    6 * 6 = 36
    6 * 7 = 42
    6 * 8 = 48
    6 * 9 = 54
    這是 7 的乘法
    7 * 1 = 7
    7 * 2 = 14
    7 * 3 = 21
    7 * 4 = 28
    7 * 5 = 35
    7 * 6 = 42
    7 * 7 = 49
    7 * 8 = 56
    7 * 9 = 63
    這是 8 的乘法
    8 * 1 = 8
    8 * 2 = 16
    8 * 3 = 24
    8 * 4 = 32
    8 * 5 = 40
    8 * 6 = 48
    8 * 7 = 56
    8 * 8 = 64
    8 * 9 = 72
    這是 9 的乘法
    9 * 1 = 9
    9 * 2 = 18
    9 * 3 = 27
    9 * 4 = 36
    9 * 5 = 45
    9 * 6 = 54
    9 * 7 = 63
    9 * 8 = 72
    9 * 9 = 81
    


```python
#自己練習的99乘法表

for i in range(1,10):
    print("乘法表",i)
    for j in range(1,10):
        print("%d * %d = %d" %(i,j,i*j))
        j+=1
    i+=1


```

    乘法 1
    1 * 1 = 1
    1 * 2 = 2
    1 * 3 = 3
    1 * 4 = 4
    1 * 5 = 5
    1 * 6 = 6
    1 * 7 = 7
    1 * 8 = 8
    1 * 9 = 9
    乘法 2
    2 * 1 = 2
    2 * 2 = 4
    2 * 3 = 6
    2 * 4 = 8
    2 * 5 = 10
    2 * 6 = 12
    2 * 7 = 14
    2 * 8 = 16
    2 * 9 = 18
    乘法 3
    3 * 1 = 3
    3 * 2 = 6
    3 * 3 = 9
    3 * 4 = 12
    3 * 5 = 15
    3 * 6 = 18
    3 * 7 = 21
    3 * 8 = 24
    3 * 9 = 27
    乘法 4
    4 * 1 = 4
    4 * 2 = 8
    4 * 3 = 12
    4 * 4 = 16
    4 * 5 = 20
    4 * 6 = 24
    4 * 7 = 28
    4 * 8 = 32
    4 * 9 = 36
    乘法 5
    5 * 1 = 5
    5 * 2 = 10
    5 * 3 = 15
    5 * 4 = 20
    5 * 5 = 25
    5 * 6 = 30
    5 * 7 = 35
    5 * 8 = 40
    5 * 9 = 45
    乘法 6
    6 * 1 = 6
    6 * 2 = 12
    6 * 3 = 18
    6 * 4 = 24
    6 * 5 = 30
    6 * 6 = 36
    6 * 7 = 42
    6 * 8 = 48
    6 * 9 = 54
    乘法 7
    7 * 1 = 7
    7 * 2 = 14
    7 * 3 = 21
    7 * 4 = 28
    7 * 5 = 35
    7 * 6 = 42
    7 * 7 = 49
    7 * 8 = 56
    7 * 9 = 63
    乘法 8
    8 * 1 = 8
    8 * 2 = 16
    8 * 3 = 24
    8 * 4 = 32
    8 * 5 = 40
    8 * 6 = 48
    8 * 7 = 56
    8 * 8 = 64
    8 * 9 = 72
    乘法 9
    9 * 1 = 9
    9 * 2 = 18
    9 * 3 = 27
    9 * 4 = 36
    9 * 5 = 45
    9 * 6 = 54
    9 * 7 = 63
    9 * 8 = 72
    9 * 9 = 81
    

## 全部的note
<pre>

計算符號之間可以加空白鍵 <br>
** : 幾次方<br>
sep="." : 分隔符號為.
end="/" : 結束用/結束

在print內寫入%d : 放入參數答案  (最後在答案要加%)
            %s : 放入的答案為字串
            %f : 放入的答案包含全部小數點
            %.1f :        包含 1位小數點
            %.3f :        包含 3位小數點
寫法如下- print("身高為%d cm，體重為%d kg，BMI為%.1f " % (height,weight,bmi))
                
    
print("顯示的文字",參數名字)<br>
my_height = input("請輸入身高(cm)") : 可以輸入文字進去對話框
使用者輸入的文字要轉換成"int"  ()<br>

print("姓名  成績")
print("%3s %3d"%(name1,score1))   #按照字元數進行規則排列出一格表格格式

**次方
//整除的數
/除以
%餘數
and 放在兩個運算子中間，判斷True or False，當兩個都為True才會是True
or 放在兩個運算子中間，判斷True or False，當兩個都為False才會是False

if,else,elif需使用冒號:還有縮排來寫code
.upper可以讓程式不用判斷大小寫

串列list用中括弧括起來
for和其他語法一樣，他同樣也是需要用到:還有縮排來寫程式

</pre>

## [ afterclass practice ]

> 1. 綜合演練 選擇題1-10  (需抄題在markdown cell ; 有程式碼的題目要有code cell )
> 2. 教學影音 lesson 9

* ## 綜合演練

### ( C ) 1. 執行下列程式，下列結果何者正確？

list1 = range(5)

print(list(list1))

(A) [1, 2, 3, 4] (B) [ 1, 2, 3, 4,5]

(C) [0, 1, 2, 3, 4] (D) [0, 1, 2, 3, 4,5]

#### 因為是從0開始總共顯示5個數，因此為[0,1,2,3,4]



```python
list1 = range(5)

print(list(list1))
```

    [0, 1, 2, 3, 4]
    

### ( A ) 2. 執行下列程式，下列結果何者正確？

list1=range(6,0,-2)

print(list(list1))

(A) [6, 4, 2] (B) [6, 0, -2] (C) [6, 4, 2, 0] (D) [6, 4, 2, 0, -2]

#### 因為從6開始總共顯示到0，但0不包含，因此為[6,4,2]


```python
list1=range(6,0,-2)

print(list(list1))

```

    [6, 4, 2]
    

### ( B ) 3. 執行下列程式，結束迴圈後，n 的值為多少？

for n in range(1,5,2):

    print(n,end=" ")

print("結束迴圈後 n=",n)

(A) 1 (B) 3 (C) 5 (D) 7

#### 因為第一次執行是n=1，第二次執行是n=1+2=3，且n會<5因此總共只有跑兩次，答案為3


```python
for n in range(1,5,2):

    print(n,end=" ")

print("結束迴圈後 n=",n)
```

    1 3 結束迴圈後 n= 3
    

### ( A ) 4. 執行 for 廻圈時，如果想要提前離開廻圈，應使用何種指令？

(A) break (B) return (C) exit (D) pause

#### 如下所示，只有跑到3就停止迴圈


```python
for i in range(1,100001):
    print(i)
    if i==3:
        break
    
```

    1
    2
    3
    

### ( C ) 5. 執行下列程式，下列結果何者正確？

list1 = range(5,-1,-2)

print(list(list1))

(A) [5,-1,-2] (B) [ 5,4,3,2,1,0,-1] (C) [5, 3, 1] (D) [5,3,1,-1]


#### 因為這樣就等於是print(list(range(5,-1,-2)))，所以就是從5開始總共顯示到-1，但-1不包含，且每次都要-2，因此為[5,3,1]



```python
list1 = range(5,-1,-2)

print(list(list1))
```

    [5, 3, 1]
    

### ( B ) 6. while 廻圈若一開始測試條件就不成立，則 while 內程式區塊將會如何處理？

(A) 執行一次 (B) 一次都不執行 (C) 重複執行 (D) 編譯錯誤


#### 因為不成立所以就不會執行

## **
### ( D ) 7. 下列那一個指令可在廻圈中跳過後面的敘述直接回到廻圈的開頭？

(A) exit (B) return (C) pause (D) continue


#### 因為continue會跳過當次循環中的當個迴圈(i)，進到下一迴圈(i+1)，然後會回上一層繼續執行迴圈外的程式

### ( C ) 8. 執行下列程式，結束迴圈後，sum 的值為多少？

sum = 0

n=8

for i in range(1, n+1,2):

    sum += i

print(sum)

(A) 8 (B) 9 (C) 16 (D) 28


#### 他會執行i=1,3,5,7，而第一次是sum=0+1，第二次sum=1+3，第三sum=4+5，第四sum=9+7，因此答案為16




```python
sum = 0

n=8

for i in range(1, n+1,2):

    sum += i

print(sum)


```

    16
    

### ( D ) 9. 執行下列程式，可看到多少個「#」字？

n=5

for i in range(1,n):

    for j in range(1,i+1):

        print("#", end="")

    print()

(A) 5 (B) 6 C) 7 (D) 10


#### 因為i=1時印一個#，i=2時印兩個#，i=3時印三個#，i=4時印四個#，則共10個


```python
n=5

for i in range(1,n):

    for j in range(1,i+1):

        print("#", end="")

    print()
    
```

    #
    ##
    ###
    ####
    

### ( C ) 10. 執行下列程式，結束迴圈後，total 的值為多少？

total = i = 1

n=5

while(i<=n):

    total *= i

    i+=1

print(total)

(A) 5 (B) 24 (C) 120 (D) 720
#### 因為當i=1時執行total=1x1=1之後i+1，當i=2時執行total=1x2=2之後i+1，當i=3時執行total=2x3=6之後i+1，當i=4時執行total=6x4=24之後i+1，當i=5時執行total=24x5=120之後i+1，但是現在i=6了不符合條件因此跳出迴圈了，所以最後答案是120



```python
total = i = 1
n=5

while(i<=n):
    total *= i
    i+=1
print(total)

```

    120
    

* ## 教學影音 lesson 9

這部影片有先介紹這周上課所教的for，之後開始說明while,break,and coutinue，首先是while，他和for最大的不同點是他是用於不確定的迴圈數裡面，真正決定他次數的是while的條件，因為如果不符合條件時就會跳出迴圈了，結束執行了，因此說是用在不確定樹木的迴圈；另外則是break,and coutinue，他們的功用主要是用在要不要繼續執行迴圈內的程式，或是結束執行後要再從哪個迴圈開始執行。

## [ self practice ]
* TA專區的【10/5課程延伸】座位挑戰

```python
for i in range(5,0,-1):
    if (j<=i):
        for j in range(1,i+1,1):
            print("* "*i)
            print("\n")
            break
```

    * * * * * 
    
    
    * * * * 
    
    
    * * * 
    
    
    * * 
    
    
    * 
    
    
    
* 延伸上題，類似課本實作題3

```python

num=int(input("請輸入數字"))
for i in range(num,0,-1):
    print("*"*i)

```

    請輸入數字8
    ********
    *******
    ******
    *****
    ****
    ***
    **
    *
    

* 實作4 :
```python
"""
小杰在for迴圈中使用or運算 if( i % 3 ==0  or i % 7 ==0)，
求出數值 1~100中，所有是3或7倍數的數之總和
"""

total=0
for i in range(1,101):
    if( i % 3 ==0  or i % 7 ==0):
        total=total+i
        continue
print("3或7倍數的數之總和為",total)


```

    3或7倍數的數之總和為 2208
    
* 實作5:

```python
"""
一個正整數除了1和自己外，無法再被其他數整除，這個數就是質數。
請輸入一正整數，列出此數的所有正因數，並判斷使數字是否為質數
"""
aa=int(input("請輸入一正整數"))
count=0

print("因數有\n1")
for i in range(2,aa):
    if aa%i!=0:  #不整除
        count+=0
    else:
        count+=1
        print(i)
if count==0:
    print(aa,"\n因為除了1和自己外，無法再被其他數整除，所以是質數")
else:
    print(aa,"\n不是質數")
        
```

    請輸入一正整數13
    因數有
    1
    13 
    因為除了1和自己外，無法再被其他數整除，所以是質數
    
