###### tags: `python`
# 流程控制
* 選擇結構
* if
* if ... else ...
* if ... elif ... else
*
* 迴圈結構
* for
* while
---
## if
```python=
x =30
y = 20
if x > y:
print("x>y")
```
## if ... else
```python=
x = 10
y = 20
if x > y:
print("x>y")
else:
print("x<y")
```
## 練習(請使用者輸入2個數字,請電腦判斷大小)
```python=
x = float( input("請輸入數字1: ") )
y = float( input("請輸入數字2: ") )
if x > y:
print("數字1 > 數字2")
else:
print("數字2 > 數字1")
```
## if ... elif ... else (類似其他語言的switch語法)
```python=
score = float(input("請輸入數字: "))
if score >= 90:
print("優等")
elif score < 90 and score >= 80:
print("甲等")
elif score < 80 and score >= 70:
print("乙等")
elif score < 70 and score >= 60:
print("丙等")
else:
print("不及格")
```
## for
```python=
for i in range(5):
print(i)
```
```python=
list1 = ["貓", "狗", "花", "鳥"]
for name in list1:
print(name)
```
## 補充 range
```python=
range(5) # 0,1,2,3,4
range(5, 10) # 5,6,7,8,9
range(5, 10, 2) # 5,7,9
```
## while
```python=
i = 0
while i<5:
print(i)
i = i + 1
```
```python=
while True:
num = int(input("number: "))
if num == -1:
break
print(num)
```
## 練習
```python=
score = 0
while score >= 0:
score = float(input("請輸入數字: "))
if score >= 90:
print("優等")
elif score < 90 and score >= 80:
print("甲等")
elif score < 80 and score >= 70:
print("乙等")
elif score < 70 and score >= 60:
print("丙等")
else:
print("不及格")
```
## 課堂練習 - 猜數字
```python=
import random
num = random.randint(1, 100)
answer = -1
while answer != num:
answer = float(input("請猜1-100的數字: "))
if answer > num:
print("太大了")
elif answer < num:
print("太小了")
else:
print("猜中了")
```
## break(停止迴圈)
```python=
import random
num = random.randint(1, 100)
answer = -1
while answer != num:
answer = float(input("請猜1-100的數字: "))
if answer == -1:
break
if answer > num:
print("太大了")
elif answer < num:
print("太小了")
else:
print("猜中了")
```
```python=
for i in range(10):
if i == 5:
break
print(i)
```
執行結果:到5時停止迴圈
```
0
1
2
3
4
```
## continue(跳過這次,繼續執行下個循環)
```python=
for i in range(10):
if i == 5:
continue
print(i)
```
執行結果:少印5
```
0
1
2
3
4
6
7
8
9
```
## pass(跳過)
當有時候暫時不確定要寫什麼,卻又一定要寫時使用
常用於if, for, while, 函數, 類別 必須縮排的情境
```python=
for i in range(10):
if i == 5:
pass
print(i)
```
執行結果:完全不影響任何結果
```
0
1
2
3
4
5
6
7
8
9
```
## 練習
**Q: 使用者輸入一個數值,顯示乘以1~10的結果**
```
請輸入一個數字: 6
6 x 1 = 6
6 x 2 = 12
6 x 3 = 18
6 x 4 = 24
6 x 5 = 30
6 x 6 = 36
6 x 7 = 42
6 x 8 = 48
6 x 9 = 54
6 x 10 = 60
```
**Q:請印出99乘法表**
```python=
for i in range(1, 10):
for j in range(1, 10):
print(i , "*", j, "=", i*j)
```
**Q:製作猜數字遊戲**
電腦亂數產生四個不重複數字,讓玩者去猜。
當使用者猜到該數字得B,當猜到數字且位置也正確得A
每次猜測電腦會回饋得到幾個A幾個B
直到使用者猜到正確數字為止
```python=
import random
numbers = [str(i) for i in range(10)]
answer = [str(i) for i in random.sample(range(0, 9), 4)]
# for i in range(4):
# answer.append(numbers.pop(random.randrange(len(numbers))))
while True:
A = 0
B = 0
guess = input('請輸入不重複的四位數數字: ')
if len(set(guess)) != 4:
print("數字不正確,太少、太多或數字重複!請重新輸入")
continue
elif not guess.isdecimal():
print('包含文字,請重新輸入數字')
continue
for i in range(4):
if guess[i] in answer:
if guess[i] == answer[i]:
print(guess[i], "is A")
A += 1
else:
print(guess[i], "is B")
B += 1
print(f'{A}A{B}B')
if A == 4:
print("恭喜,你猜中了!!")
break
```
---
## 進階練習
**Q: 請用迴圈功能畫出半顆聖誕樹的樣子**
```
*
**
***
**
***
****
*****
**
***
****
*****
******
**
**
**
```
**A:**
```python=
level = [6, 10, 14]
row = '*'
print(row)
for i in level:
for j in range(0, i, 3):
row += '*'
print(row)
row = '*'
for i in range(3):
print('**')
```
----
**Q: 請用迴圈功能畫出完整聖誕樹的樣子**
```
*
***
*****
***
*****
*******
*********
***
*****
*******
*********
***********
***
***
***
```
**A:**
```python=
level = [6, 10, 14]
row = '*'
maxNum = level[-1]
space = ' ' * ((maxNum - 2) // 2)
print(space + row)
for i in level:
for j in range(0, i, 3):
row += '**'
space = ' ' * ((maxNum - len(row)) // 2)
print(space + row)
row = '*'
space = ' ' * ((maxNum - 3) // 2)
for i in range(3):
print(space + '***')
```