---
# System prepended metadata

title: wk08_1026_元組_字典
tags: [python]

---

# wk08_1026_元組_字典_陳姿頴
## 課程進度
- ch5
    - 串列排序(.sort由大到小/.reverse順序反轉/sorted排序並新另一個list)
    - 串列常用的方法列表
    - 元組(Tuple)
- ch6
    6.1 字典基本操作
    - 建立字典 ({鍵:值,鍵:值,...}/鍵不可重複)
    - 字典取值 (dict[鍵])
    - 字典維護
    6.2 字典進階操作
    - 字典進階功能整理
    - in 功能
    - keys 及 values方法
    - items 方法
    - setdefault 方法


## [inclass practice]

## ch5
### {綜合演練}

實作2.
輸入喜歡的水果，直到Enter鍵結束，找尋fruits = ["香蕉","蘋果","橘子","鳳梨","西瓜"]水果串列是否包含此水果，並顯示該水果是串列中的第幾項。


```python
fruits = ["香蕉","蘋果","橘子","鳳梨","西瓜"]
fruit = input("輸入喜歡的水果:")
i = 0
if fruits.count(fruit) > 0:     #確認是否有此水果
    i = fruits.index(fruit)
    print("水果串列包含此水果, 在第", i+1, "位，索引值為", i)
else:
    print("水果串列不包含此水果")
```

    輸入喜歡的水果:西瓜
    水果串列包含此水果, 在第 5 位，索引值為 4
    


實作6.
西元2021年是牛年。請你開發一個程式:
當使用者輸入他的出生西元年之後，畫面會顯示這個西元年的生肖。



```python
生肖 = ['鼠','牛','虎','兔','龍','蛇','馬','羊','猴','雞','狗','豬']

x = int(input("輸入出生西元年份:"))
a = x - 2020   # 以第一個生肖(鼠--2020)為基礎
b = a % 12     # a除12的餘數
# c = a // 12    # a除12的商數

print("生肖 = ", 生肖[b])
```

    輸入出生西元年份:2019
    生肖 =  豬
    


```python
divmod(a,12)
# 輸出商數、餘數
```
    (-86, 11)



### {範例}
1. 成績由大到小排序  \<sorted>
2. 刪除指定串列元素  \<remove>


```python
# 成績由大到小排序  \<sorted>
scores = [21,63,91,20]
scores.sort(reverse = False) # 由大到小排序後不反轉
print(scores)
```

    [91, 63, 21, 20]
    


```python
scores = [21,63,91,20]
scores_sorted = sorted(scores)
print(scores_sorted)
```

    [20, 21, 63, 91]
    


```python
scores = [21,63,91,20]
scores = sorted(scores)
print(scores)
```

    [20, 21, 63, 91]
    


```python
# 刪除指定串列元素  \<remove>

fruits = ["香蕉","蘋果","橘子","鳳梨","西瓜"]
while True:                         #一定要定義甚麼時候 break
    fruit = input("你不喜歡甚麼水果?輸入enter以結束")
    if fruit == "":
        break
    if fruits.count(fruit) > 0:     # 確認是否有此水果
        fruits.remove(fruit)        # 移除某項水果
        print(fruits)
    else:
        print("水果串列不包含此水果")
```

    你不喜歡甚麼水果?輸入enter以結束西瓜
    ['香蕉', '蘋果', '橘子', '鳳梨']
    你不喜歡甚麼水果?輸入enter以結束芭樂
    水果串列不包含此水果
    你不喜歡甚麼水果?輸入enter以結束
    

### {補充} list +  while 練習
1. 計算總和：編寫一個程式，使用迴圈計算一個整數串列的所有元素的總和。
2. 找出最大值：編寫一個程式，在一個整數串列中查找並返回最大的數字。
3. 偶數過濾：編寫一個程式，接受一個整數串列，然後返回一個只包含偶數的新串列。
4. 反轉串列：編寫一個程式，將一個字元串列反轉，例如，將['a', 'b', 'c']轉換為['c', 'b', 'a']。
5. 查找元素：編寫一個程式，接受一個整數串列和一個目標數字，返回目標數字在串列中的索引，如果它不存在，返回-1。


```python
# 2. 找出最大值：編寫一個程式，在一個整數串列中查找並返回最大的數字。

list2 = [21,63,91,20]
themax = list2[0]

for n in list2:
    if n > themax:
        themax = n
        
print(themax,max(list2))
```

    91 91
    


```python
# 找出最小值
list2 = [21,63,91,20]
themin = list2[0]

for n in list2:
    if n < themin:
        themin = n
        
print(themin,min(list2))
```

    20 20
    


```python
# 4. 反轉串列：編寫一個程式，將一個字元串列反轉，例如，將['a', 'b', 'c']轉換為['c', 'b', 'a']。

list1 = ["香蕉","蘋果","橘子","鳳梨","西瓜"]
list1.reverse()
print(list1)
# list1[0:5:1]  
```

    ['西瓜', '鳳梨', '橘子', '蘋果', '香蕉']
    

## ch6


```python
dict1 = {"香蕉":20,"蘋果":30,"橘子":15,"鳳梨":10,"西瓜":50,"香蕉":100} #定義水果價錢，重複的會被後面的覆蓋
print(dict1)
```

    {'香蕉': 100, '蘋果': 30, '橘子': 15, '鳳梨': 10, '西瓜': 50}
    


```python
# 血型個性查詢 \<dictget>
血型_個性 = {"A":"內向穩重", "B":"聰明自然" ,"O":"積極樂觀", "AB":"天真單純"}
blood = input("輸入血型:")
result = 血型_個性[blood]

print("查詢結果:",result)
```

    輸入血型:A
    查詢結果: 內向穩重
    

## [afterclass practice]


1. 綜合演練 選擇題1-10  (需抄題在markdown cell ; 有程式碼的題目要有code cell )
2. 教學影音 : 新手入門#8Dictionary


##### ( B ) 1. 關於字典，下列何者敘述是錯誤的？

(A)以「鍵-值」對方式儲存 (B)資料依序排列

(C)可由「鍵」取得「值」 (D)資料隨機排列

##### ( D ) 2. d={"香蕉":20, "蘋果":50}，print(d[0]) 的結果為何？

(A)香蕉 (B)20 (C)50 (D)產生錯誤


```python
d={"香蕉":20, "蘋果":50}
print(d[0])
```


    ----------------------------------------------------------------

    KeyError                       Traceback (most recent call last)

    Cell In[4], line 2
          1 d={"香蕉":20, "蘋果":50}
    ----> 2 print(d[0])
    

    KeyError: 0


##### ( B ) 3. d={"香蕉":20, "蘋果":50}，print(d["香蕉"]) 的結果為何？

(A)香蕉 (B)20 (C)50 (D)產生錯誤


```python
d={"香蕉":20, "蘋果":50}
print(d["香蕉"])
```

    20
    

##### ( C ) 4. d={"香蕉":20, "蘋果":50}，print(d.get("巴樂", 60)) 的結果為何？

(A)20 (B)50 (C)60 (D)None


```python
d={"香蕉":20, "蘋果":50}
print(d.get("巴樂", 60))
```

    60
    

##### ( A ) 5. d={"香蕉":20, "蘋果":50}，程式「d["巴樂"]=60」的作用為：

(A)新增資料 (B)修改資料 (C)取得資料 (D)刪除資料

##### ( A ) 6. d={"香蕉":20, "蘋果":50}，程式「d.clear()」的作用為：

(A)刪除所有元素 (B)刪除一個元素 (C)刪除字典 (D)以上皆非

##### ( C ) 7. d={"香蕉":20, "蘋果":50}，print("香蕉" in d) 的結果為何？

(A)20 (B)50 (C)True (D)False


```python
d={"香蕉":20, "蘋果":50}
print("香蕉" in d) 
```

    True
    

##### ( C ) 8. 下列哪一個功能可取得字典中所有「值」？

(A)in (B)keys (C)values (D)items

##### ( D ) 9. 下列哪一個功能可取得字典中所有「鍵」及所有「值」？

(A)in (B)keys (C)values (D)items

##### ( B ) 10. d={"香蕉":20}，print(d.setdefault("巴樂")) 的結果為何？

(A)20 (B)None (C)巴樂 (D)產生錯誤


```python
d={"香蕉":20}
print(d.setdefault("巴樂"))
```

    None
    

## [selfpractice]


```python
# 1. 計算總和：編寫一個程式，使用迴圈計算一個整數串列的所有元素的總和。

values = [1, 2, 3, 4]
value = list
ttl = 0
n = len(values)

for value in values:
    ttl = ttl + value
    n = n + 1

print("total = %.f " % (ttl))
```

    total = 10 
    


```python
# 3. 偶數過濾：編寫一個程式，接受一個整數串列，然後返回一個只包含偶數的新串列。
values = [1, 2, 3, 4]
even = []
for n in values:
    if n % 2 == 0:
        even.append(n)
print(even)
```

    [2, 4]
    


```python
# 5. 查找元素：編寫一個程式，接受一個整數串列和一個目標數字，返回目標數字在串列中的索引，如果它不存在，返回-1。
values = []
target_value = 2

a = input("輸入數字:")
values = [int(x) for x in a.split(",")]
i = -1
if target_value in values:    
    i = values.index(target_value)
    print("數字串列包含此數字, 在第", i+1, "位，索引值為", i)
else:
    print("-1")
```

    輸入數字:1,2,3,4,1,2,1
    數字串列包含此數字, 在第 2 位，索引值為 1
    


實作5:
目前台幣對美金、日幣和人民幣的兌換匯率分別是
美金:28.02、日幣:0.2513、人民幣:4.24。
請設計此匯率兌換程式，輸入台幣金額後計算可以兌換多少的美金、日幣和人民幣。



```python
d = {"美金":"28.02","日幣":"0.2513","人民幣":"4.24"}
a = float(input("台幣金額"))
x = a / 28.02
y = a / 0.2513
z = a / 4.24
print(f"美金 = {x:.1f}, 日幣 = {y:.1f}, 人民幣 = {z:.1f}")
```

    台幣金額100
    美金 = 3.6, 日幣 = 397.9, 人民幣 = 23.6
    
