{%hackmd @ZZRT/CSS %}
# Lesson 4
---
## list 串列
----
### 增加元素
`list.append(obj)` 直接放入
`list.extend(obj)` 拆解並放入
----
```python=
l = [1,2,3]
l.append([4,5,6])
print(l)
# [1, 2, 3, [4, 5, 6]]
```
```python=2
l.extend([4,5,6])
print(l)
# [1, 2, 3, 4, 5, 6]
```
----
append像是把一個盒子塞進另一個盒子裡
extend像是把塑膠袋裡的東西到進盒子裡
----
`list.insert(index, obj)` 插入元素
```python
l = ['0', '1', '2', '4']
l.insert(3,'3')
print(l)
# ['0', '1', '2', '3', '4']
```
----
### 取得元素
----
`list.index(obj)`
取得第一個指定元素的位置
```python
l = [1,2,3,0,1,0]
index = l.index(0)
print(index)
# 3
```
----
`list.count(obj)`
取得指定元素的出現次數
```python
l = [1,2,3,0,1,0]
count = l.count(0)
print(index)
# 2
```
----
### 刪除元素
----
`list.remove(obj)` 刪除元素
```python
l = ['A', 'B', 'C']
l.remove('B')
print(l)
# ['A', 'C']
```
----
`list.pop(index)` 刪除 `l[index]`
<span class="comment">(預設刪除列表的最後一個元素)</span>
```python
l = ['A', 'B', 'C']
l.pop(1)
print(l)
# ['A', 'C']
```
----
|解釋|方法|
|---|---|
|增加元素|append()|
|插入元素|insert()|
|索引|index()|
|拋出|pop()|
|移除|remove()|
---
## str 字串
----
`str.upper()` 將所有字元轉成大寫
`str.lower()` 將所有字元轉成小寫
```python
a = 'uPpeR'
b = 'lOwER'
print(a.upper())
print(b.lower())
# UPPER
# lower
```
----
`str.split(str="")`
對指定字符做切片 放入串列
```python
s = "a-b-c-d"
l = s.split('-')
print(l)
# ['a', 'b', 'c', 'd']
```
常用於將一個輸入分離成多個
```python
input().split()
```
----
`str.join(sequence)` 將序列內的元素連結起來
```python
l = ['a', 'b', 'c', 'd']
s = '-'.join(l)
print(s)
# a-b-c-d
```
常用於將串列轉成字串
```python
l = ['Z', 'Z', 'R', 'T']
s = ''.join(l)
print(s)
# ZZRT
```
----
`str.replace(old, new)`
替換字串裡的字元或子字串
```python
sentence = "I can't do it"
sentence.replace("can't", "can")
print(sentence)
# I can't do it
```
hmm...~~看來只能放棄了~~
為什麼sentence沒被改變呢?
----
因為字串是 ==不可變物件==!!
```python
sentence = "I can't do it"
new_sentence = sentence.replace("can't", "can")
print(new_sentence)
# I can do it
```
這樣才是正確的寫法~
----
字串乍看之下是可變物件
```python
s = 'abc'
s += '123'
print(s)
# abc123
```
用`id()`取得他的**記憶體位址**
```python
s = 'abc'
print(id(s))
s += '123'
print(id(s))
# 139743966703856
# 139743891633648
```
就會發現返回的其實是不同物件(記憶體位址不一樣)
----
### ==**每個物件都是獨一無二的**==
----
更明顯的例子:
```python
s = 'abc'
s[0] = '0'
# TypeError: 'str' object does not support item assignment
```
出現了跟改變元組(tuple)一樣的報錯
----
```python
l = ['abc']
print(id(l))
l += '123'
print(id(l))
# 139923996853184
# 139923996853184
```
串列(list)是可變的
改變後的串列仍然是同個物件
----
`str.index(str)`
尋找指定的字符 如果找不到會報錯
`str.fInd(str)` 和index一樣 但找不到時返回-1
----
`str.startwith()`
`str.endwith()`
----
`str.format()` 格式化字串
```python=
name = '__tseng__'
time = '7:00'
print("{} 早安!".format(name))
name = "HSUxAJ"
print("{} 早安! 現在時間 {}".format(name, time))
print(f'{name} 早安!')
# __tseng__ 早安!
# HSUxAJ 早安! 現在時間 7:00
# HSUxAJ 早安!
```
----
|解釋|方法|
|---|---|
|格式化|format()|
|連接|join()|
|分割|split()|
|找尋|find()|
|查詢子字串|index()|
|替換|replace()|
---
## dict 字典
----
`dict.update(dict2)` 將另一個字典合併進來
```python=
teams = {'MARAHO': 7497,'Futureshock': 7130}
team_8 = {'ZZRT': 8129, 'ICRT': 8121}
teams.update(team_8)
print(teams)
# {'MARAHO': 7497,
# 'Futureshock': 7130,
# 'ZZRT': 8129,
# 'ICRT': 8121}
```
----
### 取得元素
----
`dict.get(key, default=None)`
以鍵取得值
如果鍵不存在 返回default
```python=
teams = {'ZZRT': 8129, 'ICRT': 8121}
name = input()
team_number = teams.get(name,'查無資料!')
print(team_number)
# >> ZZRT
# 8129
# >> ABCD
# 查無資料!
```
----
`dict.setdefault(key, default=None)`
和get類似 但如果鍵不存在
會在原字典添加 key:default
在建立資料庫時很好用
----
### 刪除元素
----
`dict.clear()` 清除字典
`dict.pop(key)` 刪除指定元素 `dict[key]`
----
### 遍歷元素
----
`dict.keys()` 取得所有的鍵
`dict.vlues()` 取得所有的值
```python
d = {'A':1,'B':2,'C':3}
keys = d.keys()
values = d.values()
print(keys)
print(values)
# dict_keys(['a', 'B', 'C'])
# dict_values([1, 2, 3])
```
`dict.items()` 取得所有的鍵值對
```python=
d = {'A': 1,'B': 2,'C': 3}
items = d.items()
print(items)
# dict_items([('a', 1), ('B', 2), ('C', 3)])
```
----
這樣就可以遍歷一個字典了!
```python=4
for item in items:
print(item)
# ('a', 1)
# ('B', 2)
# ('C', 3)
```
----
把鍵和值分開
```python=5
key, value = item
```
----
這是更常見的作法
```python=4
for key,value in items:
print(f'鍵:{key} 值:{value}')
# 鍵:a 值:1
# 鍵:B 值:2
# 鍵:C 值:3
```
----
```python
teams = {
'MARAHO': 7497,
'Futureshock': 7130,
'ZZRT': 8129,
'ICRT': 8121
}
for name,number in teams.items():
print(f'隊伍{name}: 編號{number}')
# 隊伍MARAHO: 編號7497
# 隊伍Futureshock: 編號7130
# 隊伍ZZRT: 編號8129
# 隊伍ICRT: 編號8121
```
----
|解釋|方法|
|---|---|
|鍵|keys()|
|值|values()|
|鍵和值|item()|
|刪除|pop()|
|合併|update()|
|取得|get()|
---
# 練習題目咯:D
----
**輸入**
每筆輸入檔案包含一行,由中文組成的文章,不含任何空白。
**輸出**
輸出一行,將所有「英文」的前加上一個空白作為挪抬。
----
```
input1:
總而言之總結來說可是即使是這樣英文的出現仍然代表了一定的意義。
output1:
總而言之總結來說可是即使是這樣 英文的出現仍然代表了一定的意義。
```
----
```
input2:
當前最急迫的事想必就是釐清疑惑了所謂英文關鍵是英文需要如何解讀
output2:
當前最急迫的事想必就是釐清疑惑了所謂 英文關鍵是 英文需要如何解讀
```
----
:::spoiler (點我show答案)
```python
a = input()
print(a.replace('英文', ' 英文'))
```
:::
----
某一天, 小明發現家裡旁邊的浴缸每天都以某種規律增加, 像是1L 1L 2L 5L ..., 聰明的小明發現這就是費氏數列(如下)阿, 喜於分享的他想要輸出一下
$F_{0}=0$
${\displaystyle F_{1}=1}F_{1}=1$
${\displaystyle F_{n}=F_{n-1}+F_{n-2}}F_{n}=F_{{n-1}}+F_{{n-2}}$(n≧2)
輸入
n
輸出
1~n的費氏數列的值
----
```
input1:
10
output:
1 1 2 3 5 8 13 21 34
```
----
```
input2:
13-
output:
1 1 2 3 5 8 13 21 34 55 89 144
```
{"metaMigratedAt":"2023-06-16T13:23:03.306Z","metaMigratedFrom":"YAML","title":"Lesson 4","breaks":true,"slideOptions":"{\"transition\":\"fade\",\"parallaxBackgroundImage\":\"https://cdn.discordapp.com/attachments/887196342135451652/889752537513750588/image0.png\",\"parallaxBackgroundSize\":\"2100px 1000px\",\"defaultTiming\":120}","contributors":"[{\"id\":\"35809032-c270-45a6-adab-a7e7a63da25b\",\"add\":5954,\"del\":1176},{\"id\":\"a41c05df-55bf-44dc-9b5f-6e53858b0a77\",\"add\":1018,\"del\":116}]"}