iT邦幫忙

2021 iThome 鐵人賽

DAY 4
0
自我挑戰組

Python資料分析學習地圖系列 第 4

Day 04 : Python 基礎觀念 (3)

很快地今天進入基礎觀念最後一個小章節(感動流淚啊XD),將帶大家說明流程控制、迴圈和函數的基本概念!

流程控制

流程控制可以讓我們利用程式碼做不同的事情哦!
基本結構如下,記得下一行程式碼要進行縮排 4 個字元

這邊的「條件」會讓程式進行判斷並回傳 True 或 False
如果是 True 就會進入該程式碼區塊囉

if 條件1:
    程式碼區塊1
elif 條件2:
    程式碼區塊2
else:
    程式碼區塊3

邏輯運算

and

都要成立才會回傳 True

x = 5
y = 6
if x > 3 and y < 5 :
    print('Good!')
else:
    print("Bad")

or

其中一個成立就回傳 True

x = 5
y = 6
if x > 3 or y > 5 :
    print('Good!')
else:
    print("Bad")

not

唱反調,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 函數

由於迭代一個迴圈往往需要生成一個可迭代物件,我們會利用 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]

強制離開迴圈 break

通常會搭配 if 來操作,在特定情況下我想要讓迴圈不要再執行了~
(迴圈覺得抽象可以自己多 print 看看 )

for i in range(10):
    print("i:", i)
    if i == 9:
        break

此次迴圈跳過 continue

通常會搭配 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 也是迴圈的一種,重點在條件是否成立,倘若成立就會一直執行程式碼區塊。若沒有注意,可能會導致有無窮迴圈讓的狀況。

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)

這邊私心介紹一個超好用的 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
    
  • 參數:可有可無,通常也不要太多個參數(不會超過五個,若超過五個通常可能重新思考一下這個設計)。各參數用逗號做分隔。
  • 函數的註解:可有可無,但在開發大型程式專案的通常建議加上去,方便其他專案成員了解程式碼在做什麼。各迴傳值用逗號做分隔。
  • 縮排:在定義完 def 之後所有函數均需要進行縮排 4 行,代表同一個程式碼區塊。
  • 回傳值:通常函數都會有回傳值,可以不只一個。沒有寫回傳值則預設為 None,另外如果遇到 return 就會跳出該函數,不會執行下面的程式碼。

設計函數

參數的位置會代表相對的輸入,這時候 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)

上一篇
Day 03 : Python 基礎觀念 (2)
下一篇
Day 05 : 資料處理 Pandas (1)
系列文
Python資料分析學習地圖30

尚未有邦友留言

立即登入留言