---
# System prepended metadata

title: 'Day 9 - Beginner - Dictionaries, Nesting and the Secret Auction'
tags: [python, 100 Days Of Code, Udemy]

---

Udemy課程：[100 Days Of Code（Dr. Angela Yu）](https://www.udemy.com/course/100-days-of-code/)
# Day 9 - Beginner - Dictionaries, Nesting and the Secret Auction
###### tags: `python` `Udemy` `100 Days Of Code`
2021.02.22（Mon.）
## ● 前言 / 心得
這次我覺得教的內容不算難，但project的部分結合到之前學得各種東西，所以變得滿困難的，所以這次完全是跟著老師的影片，一步一步跟著打，但打的同時也去思考，這個步驟為甚麼要這樣做。

## ● 上課筆記
## 0.code
[day-9-start](https://repl.it/@tina0915tw/day-9-start#main.py)
[day-9-1-exercise](https://repl.it/@tina0915tw/day-9-1-exercise#README.md)
[day-9-end](https://repl.it/@tina0915tw/day-9-end#main.py)
[day-9-2-exercise](https://repl.it/@tina0915tw/day-9-2-exercise#README.md)
[blind-auction-start](https://repl.it/@tina0915tw/blind-auction-start#main.py)
[blind-auction-completed](https://repl.it/@tina0915tw/blind-auction-completed#main.py)

## 1. Dictionary （字典）
可參考網站：[Python 初學第九講 — 字典](https://medium.com/ccclub/ccclub-python-for-beginners-tutorial-533b8d8d96f3)

> 注意：list陣列是用中括號[ ]；dictionary字典是用大括號{ }。

* 表示語法：
```python=
dictionaryName = {"key":"value"}

dictionaryName["key"] #這樣便可以取得這個key的value

#新增新的key跟value
dictionaryName["key1"] = "value1"

#清除所有key跟value
dictionaryName = {}

#編輯現有的key跟value
dictionaryName["key"] = "newValue"

#對此dictionary做loop迴圈
for thing in dictionary:
    print(thing) #印出dictionary裡面所有的key
    print(dictionaryName[thing]) #印出dictionary裡面所有的value
```

* 舉例：

| Key      | Value                                                                     |
| -------- | ------------------------------------------------------------------------- |
| Bug      | An error in a program that prevents the program from running as expected. |
| Function | A piece of code that you can easily call over and over again.             |
| Loop   | The action of doing something over and over again.|

```python=
dictionary = {
"Bug":"An error in a program that prevents the program from running as expected.",
"Function":"A piece of code that you can easily call over and over again.",
}

print(programming_dictionary["Bug"])#這樣便可以取得Bug的value

#新增Loop跟Loop的value
programming_dictionary["Loop"] = "The action of doing something over and over again."
```
## 2.[day-9-1-exercise](https://repl.it/@tina0915tw/day-9-1-exercise#README.md)
* 作法：
```python=
student_scores = {
  "Harry": 81,
  "Ron": 78,
  "Hermione": 99, 
  "Draco": 74,
  "Neville": 62,
}
#TODO-1:
student_grades = {}

#TODO-2:
for student in student_scores:
  score = student_scores[student]
  if score > 90:
    student_grades[student] = "Outstanding"
  elif score > 80:
    student_grades[student] = "Exceeds Expectations"
  elif score >70:
    student_grades[student] = "Acceptable"
  else:
    student_grades[student] = "Fail"

print(student_grades)
```

## 3.Nesting Lists And Dictionaries

1. Nesting
```python=
capitals = {
  "France": "Paris",
  "Germany": "Berlin",
}
```

2. Nesting a List in a Dictionary
```python=
travel_log = {
  "France": ["Paris", "Lille", "Dijon"],
  "Germany": ["Berlin", "Hamburg", "Stuttgart"],
}
```

3. Nesting a Dictionary in a Dictionary
```python=
travel_log = {
  "France": {"cities_visited": ["Paris", "Lille", "Dijon"], "total_visits": 12},
  "Germany": {"cities_visited": ["Berlin", "Hamburg", "Stuttgart"], "total_visits": 5},
}
```

4. Nesting Dictionaries in Lists
```python=
travel_log = [
{
  "country": "France", 
  "cities_visited": ["Paris", "Lille", "Dijon"], 
  "total_visits": 12,
},
{
  "country": "Germany",
  "cities_visited": ["Berlin", "Hamburg", "Stuttgart"],
  "total_visits": 5,
},
]
```

## 4.Project
* Flowchart流程圖
![](https://i.imgur.com/5GwJzqr.png)

* 老師作法：
```python=
from replit import clear
#HINT: You can call clear() to clear the output in the console.
from art import logo
print(logo)

bids = {}
bidding_finshed = False

def find_hightest_bidder(bidding_record):
  highest_bid = 0
  winner = ""
  for bidder in bidding_record:
    bid_amount = bidding_record[bidder]
    if bid_amount > highest_bid:
      highest_bid = bid_amount
      winner = bidder
  print(f"The winner is {winner} with a bid of ${highest_bid}.")

while not bidding_finshed:
  name = input("What is your name?")
  price = int(input("What is your bid? $"))
  bids[name] = price
  should_continue = input("Are there any other bidders? Type 'yes' or 'no'\n")
  if should_continue == "no":
    bidding_finshed = True
    find_hightest_bidder(bids)
  elif should_continue == "yes":
    clear()
```