---
# System prepended metadata

title: Lab04：迴圈
tags: [計算機概論]

---

# 迴圈

## for 迴圈
-　for 迴圈通常用於遍歷序列(如 list、tuple、字串等)中的每個元素
-　Python 的 for 是直接接受一個 list，來一個一個取出來進行處理
- ![upgit_20240813_1723541309.png](https://raw.githubusercontent.com/kcwc1029/obsidian-upgit-image/main/2024/08/upgit_20240813_1723541309.png)

## range函數
- 他是一個等差數據 `range(start, stop, step)`

```python
n = 10                         
for number in range(n):             # for迴圈    
    print("*",end="")               # 列印星號
```

```python
n = 10
sum_ = 0    # sum是內建函數, 不適合當作變數, 所以加上 _ 
for num in range(1,n+1):
    sum_ += num
print("總和 = ", sum_)

# 總和 =  55
```

```python=
for num in range(1,10,2):
    print(num)
# 1
# 3
# 5
# 7
# 9
```



## `break` 和 `continue`
- `break` 和 `continue` 是用於控制循環流程的關鍵字。
    -   `break` 用於立即退出整個循環。
    -   `continue` 用於跳過本次循環,進入下一次循環。
```python
# 使用 break
for i in range(5):
    if i == 3:
        break
    print(i)  # 輸出: 0 1 2

# 使用 continue
for i in range(5):
    if i == 3:
        continue
    print(i)  # 輸出: 0 1 2 4
```

## while 迴圈
- while 迴圈則根據一個條件來重複執行程式碼。
 ![upgit_20240813_1723541364.png](https://raw.githubusercontent.com/kcwc1029/obsidian-upgit-image/main/2024/08/upgit_20240813_1723541364.png)

```python
count = 0
while count < 5:
    print(count)
    count += 1 
# 0
# 1
# 2
# 3
# 4
```

## `pass`
- `pass` 是 Python 中的一個空語句,它什麼也不做。


## 迴圈的相關函數（enumerate()）
- zip()：用於將多個序列打包成一個個元組。- 
- enumerate()` 函數用於在遍歷序列時獲取元素的索引和值。



# 陣列(list)

## list的特性
- 可以儲存多個資料
- 屬於序列結構
- 值是可變的(Modifiable)

## 基本list輸出


## 串列索引與切片
```python=
arr = ["助教", "丁丁","迪西", "拉拉", "小波"]

# 索引
print(arr[0])
print(arr[1])
print(arr[-1])

# 切片
print(arr[0:3])
print(arr[1:4])
```



## 串列相加與相乘 
```python=
# 串列相加
arr1 = ["拉拉", "小波"]
arr2 = ["助教", "丁丁"]
arr1 += arr2
print(arr1) # ['拉拉', '小波', '助教', '丁丁']

# 串列相乘
arr = ["助教", "丁丁","迪西", "拉拉", "小波"] 
print(arr*3)
# ['助教', '丁丁', '迪西', '拉拉', '小波', '助教', '丁丁', '迪西', '拉拉', '小波', '助教', '丁丁', '迪西', '拉拉', '小波']

# 串列乘以數字
nums = [1, 3, 5]
numslist = nums * 5           
print(numslist)   
# [1, 3, 5, 1, 3, 5, 1, 3, 5, 1, 3, 5, 1, 3, 5]
```

- 判斷串列為空
- 找出串列位置
    - 尋找第一次出現的位置。
- 陣列元素

## 串列其他函數
因為...實在太多了拉(奪門而出
就...請同學幫幫忙，花個時間看一下

-   len()
-   indexing
-   count()
-   set()
-   insert()
-   remove()
-   clear()
-   reverse()
-   append()
-   pop()
-   copy()


額外的一些函數：
- lower(), upper()
- title(), 
- rstrip(), lstrip(), strip()
- center(), rjust(), ljust()
- startwith(), endwith()
- replace()


參考教學：
- https://www.youtube.com/watch?v=0yySumZTxJ0
- https://www.youtube.com/watch?v=orCsnSHc8Mo


```python=
arr = [23, 19, 22, 31, 18]        
games = len(arr)                  # 獲得場次數據    
print(f"經過 {games} 場比賽最高得分 = {max(arr)}")
print(f"經過 {games} 場比賽最低得分 = {min(arr)}")
print(f"經過 {games} 場比賽得分總計 = {sum(arr)}")
```

## 新增元素(append, insert)
- 增加串列元素
- 插入串列元素


## 刪除元素(del, pop)
- 使用索引刪除元素
- 刪除全部元素
- 使用值刪除元素


## 元素排序
- sort(): 直接改變陣列
- sorted()： 反之，未改變原本陣列


## 二維陣列
![upgit_20240813_1723541468.png](https://raw.githubusercontent.com/kcwc1029/obsidian-upgit-image/main/2024/08/upgit_20240813_1723541468.png)
```python=
sc = [['同學一', 80, 95, 88, 0],
      ['同學二', 98, 97, 96, 0],
     ]
sc[0][4] = sum(sc[0][1:4])
sc[1][4] = sum(sc[1][1:4])
print(sc[0]) # ['同學一', 80, 95, 88, 263]
print(sc[1]) # ['同學二', 98, 97, 96, 291]
```




# 元組
## 定義tuple
* Tuple是一種不可變的有序集合，
    * len()
    * indexing
    * count()
    * set()

## 基本用法
```python=
arr = ("助教", "丁丁","迪西", "拉拉", "小波")
print(type(arr)) # <class 'tuple'>
```

## 遍歷所有元素 
```python
arr = ('magic', 'xaab', 9099)      # 定義元組元素是字串與數字
for i in arr:
    print(i)
```

## list與tuple互換
```python
arr_tuple = ["助教", "丁丁","迪西", "拉拉", "小波"]
arr = list(arr_tuple)
arr.append("成龍")
print(arr)
# ['助教', '丁丁', '迪西', '拉拉', '小波', '成龍']

```

## 讀取tuple
```python
arr = ("助教", "丁丁","迪西", "拉拉", "小波")
print(arr[0]) # 助教
```

## tuple切片
```python
arr = ("助教", "丁丁","迪西", "拉拉", "小波")
print(arr[1:3]) # ('丁丁', '迪西')
print(arr[:2]) # ('助教', '丁丁')
print(arr[1:]) # ('丁丁', '迪西', '拉拉', '小波')
print(arr[-2:]) # ('拉拉', '小波')
print(arr[0:5:2]) # ('助教', '迪西', '小波')
```

## tuple解包與打包


Lab04作業題目
- 繳交方式 :請到https://140.116.179.59:8080完成作業題目，並將程式碼加上註解(你的理解)，很重要，否則助教有權利扣你分數
- 禁止抄襲，否則助教會來查水表
- 題目為基本題6題+一題加分題，共7題
    - Lab04_01至Lab04_05，一題16分 ==(不符規定九折，未註解七折，遲交六折)==
    - Lab04_06，一題20分 ==(不符規定九折，未註解七折，遲交六折)==
- 加分題直接列入期末成績計算
- github檔名格式：
    - 每一個檔案為：Lab04_OO.py
    - 所有檔案放入資料夾學號_Lab04在將資料夾上傳