很快地今天進入基礎觀念最後一個小章節(感動流淚啊XD),將帶大家說明流程控制、迴圈和函數的基本概念!
流程控制可以讓我們利用程式碼做不同的事情哦!
基本結構如下,記得下一行程式碼要進行縮排 4 個字元
這邊的「條件」會讓程式進行判斷並回傳 True 或 False
如果是 True 就會進入該程式碼區塊囉
if 條件1:
程式碼區塊1
elif 條件2:
程式碼區塊2
else:
程式碼區塊3
都要成立才會回傳 True
x = 5
y = 6
if x > 3 and y < 5 :
print('Good!')
else:
print("Bad")
其中一個成立就回傳 True
x = 5
y = 6
if x > 3 or y > 5 :
print('Good!')
else:
print("Bad")
唱反調,True 回傳 False、False 回傳 True
x = 5
if not x > 3:
print('Good!')
else:
print("Bad")
x = 5
if x == 3 :
print('Good!')
else:
print("Bad")
x = 5
if x != 3 :
print('Good!')
else:
print("Bad")
而 elif 可以很多,但很多初學者會覺得一定要寫 elif 和 else,不!沒有這回事
其實 if 自己就可以當一個程式碼區塊
情況一
這個很順利只會印 Good!
x = 5
if x > 3 :
print('Good!')
else:
print('Bad')
情況二
這個會印 Good! 也會印 I'm integer!
x = 5
if x > 3 :
print('Good!')
if isinstance(x, int):
print("I'm integer!")
若有多層的巢狀結構,就像有人在打波動拳一樣,這樣的程式碼結構不易閱懂且不易維護,請避免寫出這樣的結構。開發者應朝向盡量越少層越好的想法去撰寫程式碼
x = 6
if x > 1 :
if x > 2 :
if x > 3 :
if x > 4 :
if x > 5:
print("HERE")
else:
pass
else:
pass
else:
pass
else:
pass
else:
pass
程式最擅長做重複的工作,那倒底怎麼做的呢?通常我們會用迴圈來完成!
這裡會用到 for 這個關鍵字
for 變數 in 可迭代物件:
你的程式碼
x = [1, 2, 3, 4, 5]
for i in x:
print(i)
>>> 1
2
3
4
5
由於迭代一個迴圈往往需要生成一個可迭代物件,我們會利用 range 創造可迭代物件
x = range(10)
list(x)
>>> [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
# range(起始值, 終止值, 步伐)
x = range(5, 10, 2)
list(x)
>>> [5, 7, 9]
有些人可能會這樣寫去創造一個串列,大家要看得懂哦~
x = [ i**2 for i in range(3)]
print(x)
>>> [0, 1, 4]
通常會搭配 if 來操作,在特定情況下我想要讓迴圈不要再執行了~
(迴圈覺得抽象可以自己多 print 看看 )
for i in range(10):
print("i:", i)
if i == 9:
break
通常會搭配 if 來操作,在特定情況下我想要跳過這一round的步驟~
我想要在50歲以上計數人數
member_age_list = [10, 48, 13, 76, 13, 64, 57, 26, 37]
count = 0
for age in member_age_list:
if age < 50:
continue
count += 1
print(count)
比較上面的寫法,我覺得有更好的寫法是下面這個,但我只是要 demo XDDD
member_age_list = [10, 48, 13, 76, 13, 64, 57, 26, 37]
count = 0
for age in member_age_list:
if age >= 50:
count += 1
print(count)
while 也是迴圈的一種,重點在條件是否成立,倘若成立就會一直執行程式碼區塊。若沒有注意,可能會導致有無窮迴圈讓的狀況。
while 條件:
程式碼區塊
無窮迴圈的案例,只要條件一直成立(True永遠成立),那麼就會一直 print。
若要中斷程式可以按 ctrl + C
while True:
print("Hello World!")
我們可以透過這個特性來設計一個對話框
while True:
name = input("Please enter your name...")
print(f"Hello {name}")
control = input("Do you want to leave?(Y/n)")
if control == 'Y':
break
小小練習建議:大家看完這個案例可以實作一個終極密碼程式XD
這邊私心介紹一個超好用的 enumerate 枚舉物件,可以很方便地幫你迭代,會回傳計數器和元素值:
food = ["apple", "lemon", "orange"]
for i, element in enumerate(food):
print(i, element)
> 0 apple
1 lemon
2 orange
看到這邊的大家已經學會 python 的基本觀念,但是我們常常會需要重複使用這些程式碼,是否能把這些整理在一個地方,等我要用的時候呼叫呢?有的!就是函數的概念。有什麼優點呢:
def 函數名稱(參數1, 參數2, ...):
"""
函數的註解
"""
程式碼區塊
return 回傳值1, 回傳值2, ...
def get_discount(price, discount):
new_price = price * (1 - discount)
return new_price
參數的位置會代表相對的輸入,這時候 x=1, y=2 ,這時候參數的位置是會影響輸入的值
def add(x, y):
print("x:", x)
print("y:", y)
result = x + y
return result
add(1 , 2)
關鍵字輸入,我們如果指定的話,就可以利用關鍵字來指定,這時候參數的順序就不會影響輸入的值
def add(x, y):
print("x:", x)
print("y:", y)
result = x + y
return result
add(y=1 , x=2)
設定預設參數值,這時候使用函數的人就不一定要輸入該參數。請留意有預設參數值的參數,順序要放在最後。
def add(x, y=10):
print("x:", x)
print("y:", y)
result = x + y
return result
add(x=1)
回收一下伏筆,之前有提到說 python 不用特別去宣告變數類型,但我們可以在 function 加上去,讓別人清楚你在寫什麼。參數後面加上冒號,就可以寫參數類型;同樣在回傳值部分,用箭頭符號 -> 加上參數類型。
def add(x: int, y:int) -> int:
print("x:", x)
print("y:", y)
result = x + y
return result
add(1 , 2)