iT邦幫忙

2023 iThome 鐵人賽

DAY 26
0

本日的主題與前面數十篇有所不同,我們要介紹的是 ── Python!您可能有著相同的疑惑,原來大名鼎鼎的蟒蛇跟網頁也有關係嗎?帶著您的好奇,我們將會在日後的篇章慢慢向您解惑,不過,在解釋它是如何影響到我們的網頁專案前,我們還是有必要先了解一下Python的功用、語法…等內容的!

Python介紹


Python是一種廣泛使用的高階直譯式程式語言,它的優點在於它的程式碼語法可讀性高且簡潔(與英文語法相似),易於學習,卻不減功能。Python也可以在許多不同平台上執行,並具有大型標準程式庫,即意程式碼可供開發人員反覆使用,效率非常之高。

Python常用於網頁應用程式的開發、軟體開發和機器學習…等功能,它也可以與其他常用的程式設計語言,如:Java、C…等等一起搭配使用。如此高功能且易入手的程式語言,可以說是現今人人都必學的程式語言之一!

安裝Python環境


下載完畢後,在Vscode延伸模組搜尋python並下載!
https://ithelp.ithome.com.tw/upload/images/20231011/20160488eWOrKrmAX9.png
這樣我們就可以創建.py檔即可開始編寫Python囉。

或者去下載jupyter的延伸模組,創建 .ipynb 的檔案,就可以開始coding了
https://ithelp.ithome.com.tw/upload/images/20231011/20160488fc0nEbD1v0.png

基本資料型態


在介紹基本的資料形態時,我想先向您介紹一個實用的函式:

type() 函式,可以用來回傳此物件或變數的型別,這可以幫助我們在了解此變數是甚麼型態的,從而扼殺掉一些型態搞錯的低級錯誤。

print(type(123))
print(type("字串"))

https://ithelp.ithome.com.tw/upload/images/20231011/20160488SYRsCMj3fy.png

而此處用到的print()語法,式Python裡最基礎也最重要的函式,用以執行輸出我們的程式碼。

變數 var

在Python中,變數表示的是某物件的名稱。可以理解為,將一資料(不論型態),存放在一容器中,並為該容器添加標籤名。

a = 5
print(a)

https://ithelp.ithome.com.tw/upload/images/20231011/20160488M5fApJrFXf.png

a , b , c = 1, 2, "hi"
print(a,b,c)

https://ithelp.ithome.com.tw/upload/images/20231011/20160488h6R4cLqrWc.png

雖然它很方便,但是我在寫龐大的專案時,常常因為變數型態的錯誤,以致於除錯除到哭。

因此,在Python中我們可以這樣寫,提高辨識度:

variable:str = "我是變數"
number:int = 87
male:bool = True

字串String

與JavaScript相同,Python宣告字串必須使用 ” ”’ ’

"我是字串"
'我也是字串'

Python字串有著一個特別的特性:我們可以使用 六個引號 ””” ””” 來當註解。

且註解裡面的文檔是使用Markdown(輕量級標示)語法,這可以幫助我們提高程式碼的可讀性:
https://ithelp.ithome.com.tw/upload/images/20231011/20160488KKTgw4mVV4.png
以上圖的方式Markdown後,下圖便會出現一個註解的panel:
https://ithelp.ithome.com.tw/upload/images/20231011/20160488qEnb5BJDEk.png

  • 字串的操作

我們可以使用索引值來查詢字串的內容,Python中,一樣是從0開始索引,範例如下:

s = "this is a string"
print(s[5])
print(s[10])

https://ithelp.ithome.com.tw/upload/images/20231011/20160488GWe4Gn5qUq.png

您甚至可以選擇抓取從第幾個到第幾個的數值:
https://ithelp.ithome.com.tw/upload/images/20231011/20160488ZNqsV0ghGg.png

反著抓也行:
https://ithelp.ithome.com.tw/upload/images/20231011/20160488bGKlkojp8H.png

也就是說,我們可以使用索引值做到類似for迴圈的操作:
https://ithelp.ithome.com.tw/upload/images/20231011/20160488BbqXoppXHO.png

數字 int & float

與JavaScript全部都是「數字」的屬性不同,Python對於數字的分類可是很細的!

123456  #整數 int
3.14159  #浮點數 float

數字的操作:

#加減乘除 
print(6+20)   #26
print(6-20)   #-14
print(6*20)   #120
print(100/20) #5

https://ithelp.ithome.com.tw/upload/images/20231011/201604888Z3xd6fOgR.png

#平方 & 根號
print(4**2)  # 16
print(4**1/2)# 2

https://ithelp.ithome.com.tw/upload/images/20231011/201604887kMQaBRFqH.png

浮點數操作:

print(type(3.1415926))
print(type(3.))
print(type(3+3.14))

https://ithelp.ithome.com.tw/upload/images/20231011/20160488efP6qr66mM.png

  • 科學記號(同樣是float)
# 此為 3.14 * 10^5次方的表示法
print(3.14e5)
print(type(3.14e5))

# 此為 3.14 * 10^-5次方的表示法
print(3.14e-5)
print(type(3.14e-5))

https://ithelp.ithome.com.tw/upload/images/20231011/20160488SSxJ82Eno1.png

布林值 Boolean

在程式語言中,布林是個只有兩種值的原始類型資料,通常是true or false(真或假)。我們習慣將布林值用在條件式內,用以表達「成立」或「不成立」。

True
False
None

而在Python中,布林值必須是大寫開頭的。且布林值是可以當成數字做加減的!

但要注意,這樣的用法只有在Python和Mojo(Py的延伸,又稱Python++)中才能做唷。
https://ithelp.ithome.com.tw/upload/images/20231011/20160488OudEGu2bSa.png

判斷式 if else & 運算判斷子

if else在python內的語法,要注意後面一定要有: 的存在喔!

if(): 

elif(): #else if

else:

範例:

a=10;b=10
# 不等於
if (a==b):
    pass
# 等於等於
if (a!=b):
    pass
判斷 python
相等 ==
不相等 != not()
和判斷 and &
或判斷 or `

下列引用我們前幾天的判斷句和流程圖:

「 如果 今天天氣好,我就去爬山。 要是 天氣不好的話,  去健身, 但不論 好或不好,都要回家吃飯。」
https://ithelp.ithome.com.tw/upload/images/20231011/20160488HExpq17Tr6.png

我們可以使用Python把上面的判斷句寫出來:

weather = True
if (weather):
    print("去爬山")
else:
    print("去健身房")
print("回家吃飯")

https://ithelp.ithome.com.tw/upload/images/20231011/2016048827ivMhy6Q5.png

可以看到,weather已被宣告為True,所以後續的if判斷中,我們會去爬山,最後回家吃飯。

若weather被宣告不為True,後續的判斷便會去健身,但不論如何,都是要回家吃飯的。

陣列 list

陣列是程式語言中的一種靜態資料結構,能夠有順序且連貫性地儲存資料,每個儲存在陣列中的資料都有索引值:

在python中,使用 [ ] 即可定義一個陣列。

array1 = []
array2 = ["haha",True,123]
print(array2)

https://ithelp.ithome.com.tw/upload/images/20231011/20160488pBsgCBBwBi.png

跟上面的字串相似,我們也可以使用索引值去找值:

names = ["rex","lynn","lawrence","viscose","jia_son","june"]
print(names[2])
names[2] = "帥哥" #將陣列中的第二位改為"帥哥"
print(names[2])
print(names[2:])
print(names[1:3])
print(names[::2])

https://ithelp.ithome.com.tw/upload/images/20231011/20160488qxfUOmGcqi.png

值得注意的是,第三行跟第四行的程式碼。names[2] = "帥哥" 我們透過此行程式碼將串列中的”lawrence”改為”帥哥”。第四行的print(names[2]),可以發現輸出結果確實變成”帥哥”了。

元組 tuple

tuple就是翻版的陣列,使用 () 做宣告,索引值的使用方式也相同,唯一的差別在於tuple內的值不能做更改。

tuple_name = ("rex","lynn","lawrence","viscose","jia_son","june")
print(tuple_name[2])
tuple_name[2] = "帥哥"

試圖為tuple內的值做更改,結果出現了:
https://ithelp.ithome.com.tw/upload/images/20231011/20160488f5UJEe1u2f.png

迴圈

在程式語言中,迴圈是一種常見的控制流程,可以理解為:「一件事情重複做,達到條件後則停止」。常見的迴圈有三種:for迴圈while迴圈,那我們今天僅針對前兩者迴圈做介紹。

  • while迴圈

在下方程式碼中,我們的範例為:

「有一number 10,程式每跑一圈便減一,到0的時候就會停下來。」

number = 10
while (number > 0):
    print(number)
    number-=1

輸出結果如下:
https://ithelp.ithome.com.tw/upload/images/20231011/201604883VMWHqGHST.png

  • for迴圈

for迴圈應該是我個人使用次數最多的迴圈了,然而,在Python中沒有像JavaScript的迴圈 for(let i=0;i<10;i++) {} 那麼複雜。

在Python中我們會這樣寫:

for i in range(10):
    print(i)

我們也會搭配 range() 來使用for:
https://ithelp.ithome.com.tw/upload/images/20231011/201604882icnz23rA3.png

當然我們也可以對for迴圈設定起始值、終點值、遞增值:

for i in range(起始值、終點值、遞增值):

在Python中我們也可以使用list去跑for迴圈:

names = ["rex","lynn","lawrence","viscose","jia_son","june"]
for n in names:
    print(n)

https://ithelp.ithome.com.tw/upload/images/20231011/20160488wE5nZSYwYu.png

此程式碼中,會將names內的值一個一個的往n內丟,最後將n一個個輸出。

有關此類的應用有很多,我們可以先定義一個大資料,而後使用for迴圈去對每個資料做運算。

我們也可以使用 enumerate()函式 ,搭配到for迴圈裏面,除了得到所有的值以外,還能獲得其索引值:
https://ithelp.ithome.com.tw/upload/images/20231011/20160488pSQPrr5e0v.png

字典 dict

字典是類似於JavaScript中,物件的存在。我們會使用大括弧 {} 來做宣告。

而裡面的內容便是將一個鍵對一個值做宣告:

dict = {
    "name":"rex",
    "age":17,
    "male":True
}
print(dict)
dict["name"] = "帥哥" #改變dict中"name"的值
print(dict)
print(dict["age"])

我們可以這樣去找值或定義值:
https://ithelp.ithome.com.tw/upload/images/20231011/20160488nV8NqSiFJp.png

函式 function

Python除了內建的函式如print()…等,我們也可以自行建構函式:

def func():
    print("我是函式!!")

func()

https://ithelp.ithome.com.tw/upload/images/20231011/20160488mHi9VGpcJX.png

為甚麼要建立函式?

  1. 將一段程式包裝成function,能夠使該段程式重複利用。當要撰寫重複的事件時,便無須不斷複製貼上同一段程式碼,只需呼叫我們的function即可。也因此,當程式碼出現錯誤時,只需檢查被定義的function內有無差錯,除錯和維護…等更動,都變得更加容易了。
  2. 將一段程式的功能包裝成名稱清晰的function,能夠增加可讀、易讀性,使開發人員更快速地了解該段程式的功能。
  3. 每一個function在一個專案內都有自己所負責的區塊,函式與函式之間的分工明確,並且可以獨立出來看,這種模組化也是function的好處之一。
  • 傳入值 & 回傳值

我們在此製作一個使用傳入值做加減的程式:

def sum(a,b):
    print("我愛吃韓式烤肉")
    return a+b

print(sum(8,7))

https://ithelp.ithome.com.tw/upload/images/20231011/20160488jkcdhPhsVq.png

  • 物件導向

關於物件導向的概念可以參考我們之前寫的這篇 ⇒ 【Day14】Javascript物件設計!我所知道的物件導向。,雖然講解的程式語言不同,但是概念都是一樣的。

在Python中,我們可以這樣去定義物件和建構物件:

class Person():
    name = "rex"
    age = 17
    male = True

rex = Person()
print(rex)
print(rex.name)

https://ithelp.ithome.com.tw/upload/images/20231011/20160488P1RUODNfit.png

物件建構子 & 傳入值:
https://ithelp.ithome.com.tw/upload/images/20231011/201604880WiWyIuQKm.png

提升物件可讀性:

我們在寫入物件時會發現這個panel,而這個東西是可以由我們自行定義的!
https://ithelp.ithome.com.tw/upload/images/20231011/20160488ghw6HeoWxP.png

一樣是用六個 進行註解:

class Person():
    """
    ## 這是Person物件
    """
    name = "rex"
    age = 17
    male = True
    def __init__(self,
                 name:str,age:int,male:bool) -> None:
        """
        ### 建構Person物件
        --- 
        傳入值:name,age,male
        """
        self.name = name
        self.age = age
        self.male = male

rex = Person("rex",)
print(rex)
print(rex.name)

https://ithelp.ithome.com.tw/upload/images/20231011/20160488NnC4BrbI6p.png
https://ithelp.ithome.com.tw/upload/images/20231011/20160488Tm6X6SR2O0.png

物件的方法:

class Person():
    """
    ## 這是Person物件
    """
    name = "rex"
    age = 17
    male = True
    def __init__(self,
                 name:str,age:int,male:bool) -> None:
        """
        ### 建構Person物件
        --- 
        傳入值:name,age,male
        """
        self.name = name
        self.age = age
        self.male = male
    
    def hello(self):
        print(self.name,"跟你說你好")

rex = Person("rex",17,True)
viscose = Person("lynn",17,True)
lynn = Person("viscose",19,True)
rex.hello()
lynn.hello()
viscose.hello()

https://ithelp.ithome.com.tw/upload/images/20231011/20160488fNSJyqnJF0.png
輸出結果如上。


那今天的Python教學就到這裡結束了,明天我們會深入探討Python的函式修飾器,接下來就可以介紹Python與網頁之間的關聯了。


上一篇
【Day25】淺談 React.js(4)公共元件 & 頁面跳轉 Router
下一篇
【Day27】Python函數修飾器(@Decorator)
系列文
連我阿公都會-手把手教你架網站 30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言