重複結構
tags: python
While Loop
當某條件成立時,就做某件事,直到不成立為止。
python
while (condition):
do_something舉例,有人進場就計一次,並說歡迎光臨,直到10個人進場。
python
count = 0
while (count < 10):
count = count +1
print("歡迎光臨,您是第%d個客人" % count)100以內,3的倍數
印出100以內,3的倍數。
flow
start=>start: i=1
is3=>condition: i%3==0
print=>operation: print i
incre=>operation: i=i+1
lt100=>condition: i less equal than 100
end=>end
start->is3
is3(yes)->print
is3(no)->incre
print->incre
incre->lt100
lt100(yes)->is3
lt100(no)->endpython
i = 1
while (i<100):
if(i%3 == 0):
print(i)
i = i+1Challenge
- 輸出總共幾個3的倍數。
- 若尾數是3也輸出。
- 更改程式變成:輸入三個數,low, high, num。輸入low跟high之間,num的倍數。
終極密碼
電腦從1到100隨機選擇一個整數,使用者猜測該整數。若答對,回傳答對,結束程式。若答錯,告訴使用者新的區間,並繼續猜。
flow
num=>inputoutput: num = 1到100隨機的整數
guess=>inputoutput: guess = 使用者猜測
result=>condition: num == guess
range=>operation: 提示新的範圍
end=>end
num->guess->result
result(yes)->end
result(no)->range->guesspython
import random
num = random.randint(1,100)
up = 100
down = 0
guess = int(input("輸入猜測的數:"))
while (guess != num):
if guess > num:
up = guess
else:
down = guess
print("範圍在 %d 到 %d 之間" % (down, up))
guess = int(input("輸入猜測的數:"))
print("你猜對了!答案是%d" % guess)文字RPG
設定魔王血量、勇者攻擊,當魔王未死,就攻擊。換成程式的想法,當魔王血量大於0,就重複攻擊。
python
hp = 1000
attack = 13
while (hp > 0):
hp -= attack
print(f'魔王Hp剩下:{hp}')新增更多情節包含:
- 加入回合數。
- 若魔王已死,顯示死亡,而非負的血量。
- 每3回合角色升級,攻擊變成2倍。
- 加入勇者血量,會被扣血。記得勇者未死才能繼續打怪。
- 加入互動,輸入1繼續打,輸入9逃。
python
hp = 1000
attack = 13
round = 0
decide = 1
角色hp = 100
魔王攻擊 = 11
while (hp > 0 and decide==1 and 角色hp > 0):
round = round + 1
print(f'現在是第 {round} 回合')
# Level up per 3 rounds
if (round % 3 == 0):
attack = 2*attack
# 勇者
角色hp = 角色hp - 魔王攻擊
print(f'勇者被打,剩下:{角色hp}HP')
# 魔王
hp = hp - attack
if (hp > 0):
print(f'Hp剩下:{hp}\n')
else:
print('Dead')
decide = eval(input('輸入1繼續打,輸入9逃跑:'))可以嘗試加入更多的情節,以下參考: 設定
- 自訂 魔王血量、魔王攻擊
- 自訂 角色血量、角色攻擊
- 設定回合數
- 設定藥水每次補充角色20%的總血量
- 設定至少一個魔法攻擊的招式及傷害(傷害值為魔王當前血量的10%)
情節
- 輸入1繼續攻擊,輸入9逃跑。
- 輸入m1使用第一個魔法攻擊,此回合不能普通攻擊。
- 輸入drink喝一罐藥水,此回合不能普通攻擊。
- 從第【你的座號】回合開始,每3回合升級。升級後攻擊力變成原本的1.1倍。
- 每回合顯示適當的資訊。
- 你可以試著用函數來化簡,讓整體結構更加簡潔易懂。
- 你可以用字典來管理這麼多個變數。
- 或是使用類別(最佳)來實作這個文字RPG
For loop
for迴圈有兩種基本的用法,一種是「指定次數」;另一種是「迭代」。
指定次數
python
for i in range(10):
print(i)i 會從0開始遞增到9,總共進行10次。每次執行print(i)。 因此第一次印出0、第二次印出1 ... 第十次印出9
你也可以指定範圍:
python
for i in range(2,10):
print(i)i會從2開始作「10-2 = 8」次,所以會印 2 到 9。
可以指定間隔:
python
for i in range(2,10,2):
print(i, end='')
# output: 2 4 6 8Hint: 有時候我們只是指定次數,但用不到i,此時可以把i改成_。
python
for _ in range(3):
do_somethingExercise
印出50到100之間,3的倍數。並最後輸出總共有幾個3的倍數。
迭代
我們可以把一個串列當作迭代的對象:
python
shoppingList = ['醬油', '洋芋片', '麵條']
for item in shoppingList:
print("記得要買%s!" % (item))
# output:
# "記得要買醬油!"
# "記得要買洋芋片!"
# "記得要買麵條!"迭代+索引
當你想要迭代但又想要有編號的時候,可以用 enumerate
python
shoppingList = ['醬油', '洋芋片', '麵條']
for index, item in enumerate(shoppingList):
print(f'第{index+1}項要買的東西是{item}。')
# 第1項要買的東西是醬油。
# 第2項要買的東西是洋芋片。
# 第3項要買的東西是麵條。Advance Exercise
對一串數字進行質因數分解。
python
numbers = [60, 39, 77, 1024, 2022]
for number in numbers:
do_something...
# output:
# 60 = 2^2 * 3 * 5
# 39 = 3 * 13
# 1024 = 2^10
# 2022 = ...Nested Structure
接著我們看一下for loop的巢狀結構。 用*畫圖
Wrapping up
- 當我們需要指定條件時,使用
while loop - 當我們需要指定次數時,使用
for loop - 當我們需要迭代串列時,使用
for loop - 每個結構裡面都可以在各自放別的結構。
Exercise
試著做一個1A2B的猜數字遊戲吧! 參考答案