# 111-07-09 Python入門實作班上課記錄
###### tags: `python`
### 猜數字遊戲
使用者輸入1~3之間的數字,如果使用者猜對,則顯示`YES`,猜錯顯示`NO`
##### 參考程式碼
```
import random
pc = random.randint(1, 3) # 電腦的答案
player = int(input("請輸入1~3之間的數字:")) # 讓玩家猜一個數字
if pc == player:
print('YES')
else:
print('NO')
print('答案是:', pc)
```
> **補充**
> ```
> i = input('請輸入1~3之間的數字:')
> player = int(i) # 轉型成數字
> ```
> 可以結合成為一行程式碼:
> ```
> player = int(input("請輸入1~3之間的數字:"))
> ```
### 今日運勢抽籤
寫一今日運式程式,程式執行後從下面運勢中顯示一則給使用者:
- 今天中彩票
- 今天撿到錢
- 今天發薪水
- 今天發紅包
##### 方法一
```
import random
print('今天' + random.choice(['中彩票', '撿到錢', '發薪水', '發紅包']))
```
##### 方法二
```
import random
a = ['中彩票', '撿到錢', '發薪水', '發紅包']
print('今天' + a[random.randint(0, len(a) - 1)])
```
### 寫一個執行三次的while迴圈,並輸出4, 5, 6三個數字
```
i = 4
while i < 7:
print(i)
i += 1
```
##### 猜數字遊戲,玩家輸入1~10之間的數字,讓玩家猜三次,猜到就輸出"你贏了",否則顯示"猜錯"
```
import random
pc = random.randint(1, 10)
print("答案:", pc)
count = 0
while count < 3:
player = int(input('請輸入1~10之間的數字:'))
if pc == player:
print('你贏了')
break # 直接跳離while迴圈
else:
print('猜錯, 你已經猜了', count + 1, '次')
count += 1 # 把次數加1
print('遊戲結束')
```
### 醒腦練習
1. 如何刪除List內元素?
```
del 或 remove()
```
2. `['a', 'b', 'c', 'd', 'e', 'f']`清單中,如何用索引切片取得`['d', 'e', 'f']`?
```
['a', 'b', 'c', 'd', 'e', 'f'][3:]
```
3. 何謂r字串?
```
又稱為raw字串,該字串的轉義符號都會變成字串的一部分而非轉義符號
```
4. `print('我' + 18 '歲')`有何錯誤? 該如何修正?
```
字串無法和數字作串接,須先將數字作轉型
print('我' + str(18) '歲')
```
5. 如何建立一個空的set?
```
set()
```
6. `3 if 3 > 3 else 3 - 3`結果為何?
```
0
```
7. 單行if有何限制?
```
運算式內不可以有指派運算子
```
8. ```
n = 0
while n > 10:
print(n)
```
該迴圈會執行幾次?
```
無限次(因缺少了停止迴圈的條件,n變數內容不會變)
```
9. 如何取得1~1000之間的隨機整數?
```
random.randint(1, 1000)
```
10. 下面哪些是錯誤的變數命名?
- `abc`
- `_A`
- `a123`
- `6ab`
- `_xo_`
- `OK-0`
```
6ab和OK-0是錯誤的變數命名
變數名稱第一個字元不可為數字
變數只能使用底線符號
```
### 完整九九乘法表
```
j = 2
while j <= 9:
i = 1
while i <= 9:
print(str(j) + ' x ' + str(i) + " = " + str(j * i))
i += 1
print('------------------------')
j += 1
```
- 外層迴圈為九九乘法表左邊數字,內層為右邊數字
### 安排出場順序
```
import random
students = ['Aaron', 'Andy', 'Apple', 'Abner', 'Alan', 'Amber']
arrange = []
for e in range(0, len(students)): # 抽六次
index = random.randint(0, len(students) - 1) # 被抽到的學生索引值
result = students[index] # 被抽到的學生
arrange.append(result) # 將名單加到新的list
del students[index] # 刪除被抽到的人
print(arrange)
```
## 課後練習
1. 請問break放在if裡面作用是什麼?
**答:**
```
```
2. 請問continue放在while裡面的作用是什麼?
**答:**
```
```
3. 請使用range()函式寫出可以產生0, 2, 4, 6, 8數字的程式碼。
**答:**
```
```
4. 請問if內的程式碼為什麼一定要縮排?
**答:**
```
```
5. while迴圈可以做到的事的都可以使用for-in取代嗎?
**答:**
```
```
6. 請問else這個關鍵字的用途是什麼?
**答:**
```
```
7. 如何判斷一個數字是不是偶數?
**答:**
```
```
8. 如果要寫出一個完整的九九乘法表,會需要幾層的迴圈?
**答:**
```
```
9. Python有哪幾種迴圈?
**答:**
```
```
10. 寫一個程式,將['aaron', 'apple', 'amanda']內的每個元素顯示到畫面上,並在每個元素前面顯示他的索引值。
輸出範例:
```
0: aaron
1: apple
2: amanda
```
**答:**
```
```
11. 請問下面迴圈的print()會執行幾次?
```
i = 0
j = 100
while i < j:
if i % 10 == 0:
break
print(i)
```
**答:**
```
```
12. Python內建什麼函式可以算list內數值資料的加總?
**答:**
```
```
13. 何謂迭代?
**答:**
```
```
14. 請使用range()寫出可以產生[-10,-9,-8,-7,-6]的list。
**答:**
```
```
15. 將下面程式碼改用「for Comprehension」的寫法:
```python
data = [1, 2, 3, 4]
result = []
for item in data:
result.append(item ** 2)
```
**答:**
```
```
16. 如何在終端機畫面上輸出如下的圖案?
```
*
**
***
****
*****
```
**答:**
```
```
## 最後一堂課的練習與參考程式碼
1. 寫一猜數字遊戲,猜1~10之間的數字,猜到對為止,猜對後顯示玩家總共猜了幾次?
> **提示**
> 功能拆解:
> - 需要透過random模組隨機產生1~10之間的一個數字做為答案
> - 需要input讓玩家輸入他猜的數字
> - 使用if判斷式判斷是不是猜中了
> - 使用`while Ture`無窮迴圈來讓使用者一直猜
> - 猜中後需使用bread離開無窮迴圈
> - 定義一個變數來記錄玩家猜了幾次,每次input之後就加1
> - 離開while迴圈把紀錄的次數顯示出來(或是猜對就顯示也可以)
#### 參考程式碼
```
import random
pc = random.randint(1, 10) # 答案
count = 0 # 記錄次數用的變數
while True:
player = int(input('請輸入1~10之間的數字:'))
count += 1 # 增加次數
if player == pc:
print('猜對了,您總共猜了', count, '次')
break
else:
print('猜錯了!')
```
2. 寫一個猜拳遊戲,玩家數入:0=剪刀,1=石頭,2=布,跟電腦猜拳後告知輸贏。
#### 參考程式碼
```
import random
SCISSORS = 0 # 剪刀
STONE = 1 # 石頭
PAPER = 2 # 布
pc = random.randint(0, 2) # 隨機電腦的出拳
player = int(input('請出拳(0=剪刀, 1=石頭, 2=步):'))
if player == SCISSORS:
print('你出了剪刀')
elif player == STONE:
print('你出了石頭')
elif player == PAPER:
print('你出了布')
else:
print('輸入錯誤!')
if pc == SCISSORS:
print('電腦出剪刀')
elif pc == STONE:
print('電腦出石頭')
elif pc == PAPER:
print('電腦出了布')
else:
print('輸入錯誤!')
if pc == player:
print('平手')
elif pc == SCISSORS and player == STONE:
print('你贏了')
elif pc == SCISSORS and player == PAPER:
print('你輸了')
elif pc == STONE and player == SCISSORS:
print('你輸了')
elif pc == STONE and player == PAPER:
print('你贏了')
elif pc == PAPER and player == SCISSORS:
print('你贏了')
elif pc == PAPER and player == STONE:
print('你輸了')
else:
print('錯誤!')
```
3. 有一個List內容為`[90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100]`,請使用索引運算來取得`[100, 98, 96, 94, 92, 90]`這樣的List並顯示在畫面上。
#### 參考程式碼
```
print([90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100][-1::-2])
```