# 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