PYTHON-1

BY 企鵝

講師介紹

  • 北一資研學術長
  • 企鵝企鵝企鵝
  • IG:@fgisc_penguin
  • gmail:d11130110@gapps.fg.tp.edu.tw

what is python?

  • Python的創始人吉多·范羅蘇姆在聖誕節發想出來的程式語言

  • 因為喜歡Monty Python's Flying Circus 電視喜劇系列,而使用Python作為該程式語言的名字

  • 為直譯式語言,也就是邊執行邊轉譯成機器語言,這造成它運行的速度比較慢

關於PYTHON

WHY PYTHON?

原因

簡單

語法簡潔,可讀性高,適合剛入門的新手接觸

泛用

幾乎在所有作業系統跟裝置上都可以運行,兼具實用性,從簡單的應用程式開發到龐大專案設計都能應用到

擴充性強

幾乎寫任何類型的程式都有世界各地大神開發的函式庫可以直接利用

環境配置

VS Code

  • 全名Visual Studio Code
  • 不是Microsoft Visual Studio
  • 是一款由微軟開發且跨平台的免費原始碼編輯器
  • 預設支援非常多的程式語言,包括Javascript、Typescript、CSS 和 HTML;也可以下載擴充元件支援Python、C/C++、Java和Go在內的其他語言。支援功能包括語法突顯、括號補全、程式碼摺疊;對於部分語言,可以使用IntelliSense(程式碼自動補全)

VS code

第一行程式

print( ):輸出

print("Hello World!")

print( ) 會輸出括號中的內容(顯示在螢幕上)並換行

文字要放在雙引號內,代表它是一個字串(string)

print():輸出

print("First", "Second", "Third")

如果要一次列印多個文字,可以用逗號分隔

每個文字會以空格分開

註解、換行

print("Hello World!") #English
print("Bonjour le monde") #Francais
print("Hallo Welt") #Deutsch

print("New... \n")
print("Line")

# 後面的文字是註解,不影響程式執行

如果要換行則要加上\n,也就是跳脫字元

程式碼當中的空格、換行不會影響程式執行

變數與運算、輸出

  • 變數代表某一塊記憶體空間,透過有意義的名稱,方便我們指稱某一塊記憶體(或其存放的資料)。
  • 不等於未知數
  • 可以透過變數去做運算
  • 留意保留字

變數是什麼?

為變數賦值並進行運算

程式中的 "=" 和數學符號中的等於的意義並不相同

這邊的 "=" 代表賦值(asign)

以上述程式為例,這串程式碼代表

將變數 a 的值設為變數 b + c 的和

b = 3 #將變數b的值設為3
c = 4 #將變數c的值設為4
a = b + c #將變數a的值設為b與c的和
print("a =", a) #a = 7

更多的運算

就是基本的加減乘除

比較特別的是 "%" 是取餘數

舉個例子: 5 % 4 = 1

b = 3 #將變數b的值設為3
c = 4 #將變數c的值設為4

a = b + c #將變數a的值設為b與c的和
print("a =", a) #a = 7

a = b - c #將變數a的值設為b與c的差
print("a =", a) #a = -1

a = b * c #將變數a的值設為b與c的積
print("a =", a) #a = 12

a = b / c #將變數a的值設為b與c的商
print("a =", a) #a = 0.75

a = b % c #將變數a的值設為b/c的餘數
print("a =", a) #a = 3

資料型態

a = 1 #int(整數)
b = 0.666 #float(浮點數/小數)
c = "12345" #string(字串)

在程式中有所謂「資料型態」的差別

在其他語言(比如C++)中會要求宣告資料型態

但Python支援所謂「動態型別」

就是電腦會自動幫你判斷變數的資料型態

不過自然執行速度會相對較慢

除法(小數)運算

int( )就是將任意資料型態的東西轉成整數

類似的還有str( )

需要留意的是在C++中一般的除法

是用無條件捨去的計算方式

更多更多的運算

就是更懶一點的寫法

a = 3
b = 4
c = 5
d = 6
e = 7
f = 8

a += 1 #a = a+1 -> 4
b -= 1 #b = b-1 -> 3
c *= 3 #c = c*3 -> 15
d /= 2 #d = d/2 -> 3
e %= 3 #e = e%3 -> 1

f**=3 #f = f*f*f(f的三次方) -> 512

更多更多更多的運算(?

字串可以用加號連接

數字和字串不能直接相加

First = 95
Second = 27

first = "95"
second = "27"

PlusInt = First + Second
PlusString = first + second

#TypeError: can onlyconcatenate str (not "int") to str
PlusIntStr = first + Second 

print("PlusInt =", PlusInt) #PlusInt = 122
print("PlusString =", PlusString) #PlusString = 9527

輸入:input( )

如同我在這個主題的開頭所陳述的:

如果我有需要輸入並儲存的數值

應該要怎麼辦呢?

answer = input("Question 01 ")

print(type(answer)) #<class 'str'>
print(answer)

answer = int(answer)
print(type(answer)) #<class 'int'>
print(answer)

需要留意的是input( )預設的資料型態是string

如果想要轉成整數記得使用int( )

補充:想知道資料型態可以使用type( )

變數命名規則

我們先來看看英文版的解說:

變數命名規則

在開發大型專案時,我們經常陷入一個

「一覺醒來忘記昨天打了啥」的狀態

所以除了下註解之外,好懂的變數名稱

也可以幫助自己和團隊成員更好讀懂code

我們再來看個兩個範例:

#not recommended:
x = "John Smith"
y, z = x.split()
print(z, y, sep = ", ") 
#Smith, John
#recommended:
name = "John Smith"
name_1st, name_2nd = x.split()
print(name_1st, name_2nd, sep = ", ") 
#Smith, John

list, tuple, set:list

List Basic

list(串列),基本上等於其他語言的array(陣列)

讓使用者可以透過索引編號去存取數值

你可以想像list是很多有編號的變數所組成的

list的編號從0開始,因此第一個元素的索引值是0,

第二個是1,以此類推

[]代表空陣列

lst = [1415, "summer", 3.1415926, [1,2,3]]
print(lst[1]) #summer
print(lst[2]) #3.1415926

lst_empty = []
print(lst_empty) #[]

因為Python支援動態型別的關係,

整數、小數、字串或者另一個list都可以

放到同一個list中

List indices:取值&len( )

如果在一個list中有多個list,

取值方法如下:

lst = [1415, "summer", 3.1415926, [1,2,[3,4,5]]]
print(lst[3][2]) #[3,4,5]
print(lst[3][2][2]) #5

如果想知道該list的長度,

可以使用len( )

lst = [1415, "summer", 3.1415926, [1,2,[3,4,5]]]
print(len(lst)) #4

QUICK CHECK: LEN( )

len(q1) = ?

len(q2) = ?

len(q3) = ?

q1 = [0]
q2 = []
q3 = [[1, 3, [4, 5], 6], 7]

List indices:負索引值

在Python中,你可以使用負索引值,

即從list的最後一個索引值開始計算

[-1] 表示倒數第一個值,[-2] 代表倒數第二個

以此類推

lst = [1415, "summer", 3.1415926, [1,2,[3,4,5]]]
print(lst[-1][-1]) #[3, 4, 5]
print(lst[-1][-1][-1]) #5

List indices:索引

lst = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

print(lst[::]) #[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
print(lst[2::]) #[2, 3, 4, 5, 6, 7, 8, 9]
print(lst[:6:]) #[0, 1, 2, 3, 4, 5]
print(lst[::2]) #[0, 2, 4, 6, 8]
print(lst[2:6:2]) #[2, 4]
串列名[起始位置的索引值:結束位置的索引值+1:間隔]

可以選擇性的填入這三個值

沒有填入的會用預設值

Modifying List:append( ) & extend( )

append( )可以將一個元素添加到list的最尾端,

extend( )可以將兩個list連起來:

lst = [1,2,3,4]
lst.append(5)
print(lst) #[1, 2, 3, 4, 5]

lst = [1,2,3,4]
lst.append([5,6,7])
print(lst) #[1, 2, 3, 4, [5, 6, 7]]

lst = [1,2,3,4]
lst.extend([5,6,7])
print(lst) #[1, 2, 3, 4, 5, 6, 7]

Modifying List:insert( )

insert( )可以將一個元素插在

宣告的index值和該值的上一值的中間:

lst = [1,2,3,4]
lst.insert(2, "two")
print(lst) #[1, 2, 'two', 3, 4]

lst.insert(0, "start")
print(lst) #['start', 1, 2, 'two', 3, 4]

lst.insert(-1, "last?")
print(lst) #['start', 1, 2, 'two', 3, 'last?', 4]

Modifying List:del & remove( )

del 的功能是刪除 list[n] 的那一個元素

透過取index達成指定元素刪除

remove( )是直接指定某個要刪除的值

如果list中有兩個以上相同的值

只會移除第一個找到的值

lst = [1,3,4,5,3]
del lst[1]
print(lst) #[1, 4, 5, 3]
del lst[:2]
print(lst) #[5, 3]

lst = [1,3,4,5,3]
lst.remove(3)
print(lst) #[1, 4, 5, 3]
lst.remove(3)
print(lst) #[1, 4, 5]

Modifying List:list( ) & pop( )

使用list( ),可以將字串轉成list的型態

eco_friendly = list("How dare you?!") #將字串轉成list
print(eco_friendly) #['H', 'o', 'w', ' ', 'd', 'a', 'r', 'e', ' ', 'y', 'o', 'u', '?', '!']

eco_friendly.pop() #刪除最後一個元素
print(eco_friendly) #['H', 'o', 'w', ' ', 'd', 'a', 'r', 'e', ' ', 'y', 'o', 'u', '?']

eco_friendly.pop(2) #刪除索引值2,也就是第三個元素
print(eco_friendly) #['H', 'o', ' ', 'd', 'a', 'r', 'e', ' ', 'y', 'o', 'u', '?']

eco_friendly.remove('o') #移除第一個'o'
print(eco_friendly) #['H', ' ', 'd', 'a', 'r', 'e', ' ', 'y', 'o', 'u', '?']

pop( )如果在()中沒有給索引值,會刪除預設值

也就是最後一個元素

Sorting List:sort( )

sort( )可以將list中的數字由小到大排序

如果list中的元素是string,

則會依照第一個字元的ASCII CODE由小到大排序

如果第一個字元相同,則會比較第二個字元

一個陣列中如果有不同資料型態的元素,則無法比較

lst = [3, 8, 4, 0, 2, 1]
lst.sort()
print(lst) #[0, 1, 2, 3, 4, 8]

lst = ["Python", "is", "better", "than", "C"]
lst.sort()
print(lst) #['C', 'Python', 'better', 'is', 'than']

ASCII CODE

  • 在電腦中,所有的資料在儲存和運算時都要使用二進位數表示
  • 例如字母(包括大寫)以及0、1等數字還有一些常用的符號
  • 在電腦中儲存時也要使用二進位數來表示,而具體用哪些二進位數字表示哪個符號,這就是編碼。
  • 如果不同的電腦要想互相通信而不造成混亂,那麼每台電腦就必須使用相同的編碼規則,於是就有了ASCII編碼
  • 在ASCII CODE的編碼規則中,大寫字母的ASCII CODE較小,而小寫字母的ASCII編碼較大
  • 具體請參照維基百科ASCII TABLE

Sorting List:sort( )

sort( )也可以將list裡的list做排序,

依照第0~n個index中的值由小到大排序

如果改成sort(reverse=True)

就會以由大到小的方式排列

lst = [[3,5], [2,9], [2,3], [4,1], [3,2]]
lst.sort()
print(lst) #[[2, 3], [2, 9], [3, 2], [3, 5], [4, 1]]

lst = [2,3,7,1,4,6]
lst.sort(reverse=True)
print(lst) #[7, 6, 4, 3, 2, 1]

Other Common List Operations:in

in 會回傳目標值是否在這個list裡面

如果是,會回傳True ;反之, 回傳False

not in 則相反

lst = [1,3,4,5]
print(3 in lst) #True
print(3 not in lst) #False
print(2 in lst) #False
print(2 not in lst) #True

Other Common List Operations:+ & *

+ 可以把兩個list的內容加起來,合併成一個list

* 可以將list的內容乘倍,並合併成一個list

a = [1,2,3]
b = [4,5]
c = a + b
print(c) #[1, 2, 3, 4, 5]

x = ['None']
y = x * 4
print(y) #['None', 'None', 'None', 'None']

z = [3,1]
print(z * 2) #[3, 1, 3, 1]

Other Common List Operations:max( ) & min( )

max( )會回傳list的最大值;

min( )則是最小值

如果一個list裡有不同的資料型態則會報錯

lst = [3,7,0,-2,11]
print(max(lst)) #11
print(min(lst)) #-2

Other Common List Operations:index( ) & count( )

index( )會回傳目標值在list的index值

若list中有多個相同目標值,則回傳第一個

若是該值沒有在list中,則會報錯

count( )會回傳目標值在list中出現了幾次

x = [1,3,"five",7,-2,7]
print(x.index(7)) #3
print(x.index(5)) #ValueError

y = [1,2,2,3,5,2,5]
print(y.count(2)) #3
print(y.count(5)) #2
print(y.count(4)) #0

Summary of List Operations

結束啦!

下次小社課上再會!

Made with Slides.com