# Python實作課程
## 第一堂課 : 猜數字遊戲
## 2022 / 3 / 24
### Tony
---
## 硬體設備
----
學校可以寫python的編輯器是**Spyder**
左方為撰寫程式的地方,右下方為終端機

---
## 猜數字遊戲
----
猜數字遊戲(Guess the number) a.k.a 終極密碼
是一個在特定數字範圍內
猜到出題者所指定數字的遊戲
每次的猜測都會讓範圍縮小,直到答案被猜到
---
## 遊戲規則
### (即程式要實現的東西)
----
* 由兩個一大一小的數字劃出範圍
* 有唯一的答案
* 依照每次猜的數字來縮減範圍
* 若猜的數字小於答案,則下界變成該數字
* 若猜的數字大於答案,則上界變成該數字
* 如果猜到上下界重疊,則玩家自動獲勝
* 若下屆的數字大於上界(意外),則出題者輸掉遊戲
---
## 開始寫程式
----
你可以下載模板:[點我](https://github.com/Tony041010/2022_CRC_Python_Project_Class_Template)
主要要寫的三個函式:
1. 主程式 (幫你寫好了)
2. 猜數字函式 I (電腦出題使用者猜)
3. 猜數字函式 II (使用者出題電腦猜)
課堂上會寫猜數字函式I,猜數字函式II的部份各位有興趣可以自己寫寫看
參考答案下禮拜會公布
```python=
def guess(x) #電腦出題
def computer_guess(x) # 使用者出題
if __name__ == '__main__':
```
----
## 主函式
Python沒有強迫要有像C++`int main()`的函式,通常就是直接運行你打出的程式碼(函式除外)
但也可以自己創造出主函式,利用`if __name__ == '__main__':`
<font color='#FFF300'>可以幫助整理程式碼,看起來比較整齊,也會知道哪些程式會跑哪些不會</font>
```python=
if __name__ == '__main__':
# 裡面塞主要運行的部分
```
----
## 猜數字函式 I
### (電腦出題使用者猜)
----
程式執行程序:
1. 選擇範圍(1 ~ 一個數字x)
2. 使用者輸入猜測的數字<font color='#FFF300'>(不包括1跟x)</font>
3. 電腦給出回覆:
* 高於答案
* 低於答案
* 等於答案
4. 重複 2 跟 3 直到猜中答案
----
**使用工具:random**
我們模擬電腦在選答案,或是在猜測答案的時候,都是讓它在一個範圍內隨機選一個數字
故我們要利用random資料包裡面的`random.randint()`函式,隨機挑出一個數字
```python=
import random # 輸入這個就可以把random資料包引入這個函式
# 類似 C++ 的 include 的概念
```
----
f string
我們需要在輸出的字串中放入程式中某些變數的內容,
此時就可以使用f string,把變數內容用大括號包起來
```python=
high = 100
low = 10
print(f'Guess a number bgetween {low} and {high}')
# 輸出 : Guess a number between 10 and 100
```
----
下一頁是完整的code內容
想挑戰自己寫的先不要往下看
----
```python=
import random
def guess(x):
answer = random.randint(1+1, x-1)
guess = 0
low = 1
high = x
while guess != answer:
guess = int(input(f'Guess a number between {low} and {high} :'))
if guess < answer:
print('Sorry, guess again. Too low.')
low = guess
elif guess > answer:
print('Sorry, guess agin. Too high.')
high = guess
print(f'Congratulation! You got the right number : {answer}.')
```
{"metaMigratedAt":"2023-06-16T21:36:18.159Z","metaMigratedFrom":"YAML","title":"Python實作一:猜數字遊戲","breaks":true,"slideOptions":"{\"transition\":\"slide\",\"theme\":null}","contributors":"[{\"id\":\"4f731eff-9d88-41f4-af56-2e3e02f20cfc\",\"add\":2265,\"del\":83}]"}