PYTHON

BY 企鵝

講師介紹

  • 北一資研學術長
  • 企鵝企鵝企鵝
  • 水一下簡報長度

what is python?

是大蟒蛇嗎?

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

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

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

關於PYTHON

WHY PYTHON?

程式語言有這麼多選擇,為什麼要學PYTHON?

原因

簡單

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

泛用

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

擴充性強

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

環境配置

Google Colaboratory

  • 全名Google Collaboratory
  • 是一個雲端開發環境,可以讓你透過瀏覽器編寫及執行 Python 程式碼
  • 不用安裝即可使用 Python 編寫和執行代碼
  • 就是很方便

GOOgle colab

搜尋google colab

點這個

點左上角的檔案,再點新增筆記本

登入你的google帳戶

完成!簡單吧

點擊+ 程式碼就可以新增

寫程式的區塊

第一行程式

Hello World!

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( )

實作練習1:BMI計算器

計算公式:

體重(kg) / (身高(m)*身高(m))

輸入身高、體重 --> 計算 --> 輸出

企鵝是一位企鵝身心健康管理專員

她想要幫所有的企鵝計算他們的BMI

以避免企鵝們吃太多

但很可惜她不怎麼會寫程式

你們可以幫她解決這個困擾嗎

順帶一提因為企鵝們的數學很差

輸入身高時只會輸入公分、而且只會輸入整數

請記得幫他們更換單位喔

選擇結構

if elif else

在寫程式的時候一定會遇到

因為條件不同、而需要做出不同判斷的時候

這時候就輪到選擇結構出場啦

選擇結構是什麼?

if elif else

electricity = input()

if electricity >= 10:
  print("好電!!!")

上面基本上就是if的語法

下面則是一個小例子:

if 條件一:
  條件一成立時會執行的東東 #記得縮排

縮排是什麼?

electricity = input()

if electricity >= 10:
  print("好電!!!")

if elif else

if 條件一:
  條件一成立時要執行的東東
  
elif 條件二:
  如果條件一沒成立+條件二成立時要執行的東東
  
elif 條件三:
  如果條件一沒成立+條件二沒成立+條件三成立時要執行的東東
  
else:
  以上條件全都沒成立時要執行的東東

看不懂沒關係

我們來看個例子

if elif else : Case 1

a = 10

if a == 10:
  print("在if的時候就成立啦") #程式在這停止執行
  
elif a == 7:
  print("在elif的時候成立啦")
  
elif a == 5:
  print("雖然比較後面但還是在elif的時候成立啦")
  
else:
  print("哭哭都沒成立")

if elif else : Case 2

a = 7

if a == 10:
  print("在if的時候就成立啦") 
  
elif a == 7:
  print("在elif的時候成立啦") #程式在這停止執行
  
elif a == 5:
  print("雖然比較後面但還是在elif的時候成立啦")
  
else:
  print("哭哭都沒成立")

if elif else : Case 3

a = 5

if a == 10:
  print("在if的時候就成立啦") 
  
elif a == 7:
  print("在elif的時候成立啦") 
  
elif a == 5:
  print("雖然比較後面但還是在elif的時候成立啦") #程式在這停止執行
  
else:
  print("哭哭都沒成立")

if elif else : Case 4

a = 504

if a == 10:
  print("在if的時候就成立啦") 
  
elif a == 7:
  print("在elif的時候成立啦") 
  
elif a == 5:
  print("雖然比較後面但還是在elif的時候成立啦")
  
else:
  print("哭哭都沒成立") #程式在這停止執行

if elif else : 多重條件

time = int(input("現在幾點了?!"))

if time == 0 or time == 24:	#or代表兩邊有其中一個條件成立就可以執行
  print("midnight")
  
elif time >= 6 and time < 12:	#and代表兩邊條件都要成立才可以執行
  print("Good Morning")
  
elif time == 12:
  print("Lunch time!")
  
elif time > 12 and time <= 17:
  print("Good Afternoon")

elif time > 17 and time <= 19:
  print("Good Evening")
  
elif (time > 19 and time < 24) or (time > 0 and time < 6):
  print("Good Night")
  
else:
  print("Error")

if elif else : 布林值(Boolean)

a = 3

print(a > 2) #True
print(a > 4) #False
print(a != 3) #False
print(not(a > 4)) #True

我們剛剛一直重複的「條件成立」或「條件不成立」

這件事其實可以看成是另一種「變數」

也就是True or False的布林值

「條件成立」就是 "True"

「條件不成立」就是 "False"

"!=" 就是不等於

not 就是取邏輯相反的布林值

實作練習2:還是BMI

企鵝學會了計算BMI

但她還是不知道體重的正常標準是怎樣

她希望建立一個選擇器

來判斷哪隻小企鵝需要去跑三千

這個重責大任就交給你們了

BMI<18.5  --> 體重過輕

18.5<=BMI<24  --> 體重適中

BMI>=24  --> 體重過重

請結合剛剛的計算器

建立符合標準的選擇器

重複結構

因為一直 ctrl+c ctrl+v 很麻煩

重複結構是什麼?

就是一個一直重複、不斷重複的迴圈

常見的迴圈有for、while兩種

重複結構:for (for...in)

for i in range(0,5):
  print(i)

range(0,5)類似一個整數數列,包含整數0,1,2,3,4

最後一個數字不列入計算(此範例中是數字5)

i會從首項開始依序變成數列中的各個數字

總共重複5次

重複結構:for (for...in)

sum = 0

for i in range(0,5):
  sum += i #sum = sum + i
  print(sum)

上述的例子表示 i 會依序變成range數列(0,1,2,3,4)

中的各個數字

然後重複執行迴圈中的指令(將sum + i)

通常在重複次數已知的情況下會使用for迴圈

for 迴圈下要縮排(但電腦通常會幫你縮)

重複結構:for (for...in)

lecturer = "Penguin"

for i in lecturer:
  print(i)

for 除了可以 in range 之外

for 還可以 in 字串

也就是依序讀取字串當中的每個字元

等等會看到的串列(list)也可以用 for 進行遍歷

重複結構:while

a = 10

while a != 2:
  a -= 2 #a = a - 2
  print(a)

print(a)

結合前面布林值的概念

如果while後面條件成立

程式就會執行

你可以把它當成會一直重複執行的 if

直到條件不成立時才會停止

while 條件一:
  條件一成立時會一直重複執行的動作

重複結構:while

answer = "來自抹茶冰淇淋的靈魂拷問"
while answer:
  answer = input("抹茶冰淇淋好吃嗎?")
  if answer == "當然不,那是世界上最恐怖的東西":
    break
print("英雄所見略同!")

對於迴圈可能被無法預期狀況打斷的情況

一般會使用while迴圈

break用來打破迴圈

實作練習3 : 當然題目是有連續的吧

BMI計算器(重複迴圈版)

企鵝現在終於能掌握小企鵝們的健康狀況了

但剛剛測試的時候就發現了

要一直重新執行好麻煩啊

可以請你幫她寫一個會重複執行的計算器嗎

企鵝會先輸入小企鵝們的總企鵝數

計算會重複總企鵝數次

一樣請結合剛剛寫的計算器

複合資料型態

list string dictionary

複合資料型態有什麼作用?

如果今天我們需要為社團製作一個社員名單,

首先我們需要列出他們的班級座號姓名,

總共40人

應該不會有人想手動設定40個變數吧

複合資料型態就是讓資料處理更加簡單的東西

複合資料型態:List

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

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

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

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

第二個是1,以此類推

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

lst.remove("summer")
print(lst[1]) #3.1415926

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

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

放到同一個list中

複合資料型態:List

因為list在編號上的規則性,

for迴圈也經常被用來對list進行操作

names = [] #宣告一個空list
num = int(input("How many club members are you going to deal with?"))

for i in range(0, num):
  names.append(input("Name please?")) #在list的最末端新增一個輸入值
  
print(names)

.append( )可以加長list

也就是在最末端新增元素

複合資料型態:List

使用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( )如果在()中沒有給索引值,會刪除預設值

也就是最後一個元素

remove( )只會移除第一個找到的元素

複合資料型態:List

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:間隔]

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

沒有填入的會用預設值

複合資料型態:List

lst = [1,2,3,4,5]

for i in lst:
  print(i)

剛剛提過我們經常使用for迴圈對陣列進行操作

也提過for i in 不只可以放range

range的位置也可以放list

i 會依序變成list中的各個數值

複合資料型態:List

word = input("I need a word ") #輸入單字

v = 0 #初始化母音數量
c = 0 #初始化子音數量
vowels = "aeiou" #母音列表
lst_w = list(word) #將字串轉成list

for i in lst_w: #讀取字串中每個字母,並檢查
  if i in vowels: #如果是母音列表中的其中一個
    v += 1 
  else: #若是母音列表以外的任意字母
    c += 1

print("Vowel(s): " + str(v) + "\nConsonant: " + str(c))

複合資料型態:字串!?

nums = "13 14 15"
nums_lst = nums.split()
print(nums_lst) #['13', '14', '15']

strs = "Summer camp is great!"
strs_lst = strs.split()
print(strs_lst) #['Summer', 'camp', 'is', 'great!']

沒錯又是我們的字串

顯然對於複合資料型態字串也能有一些操作

譬如:切它!

也就是我們的 .split( )

split( )可以以空白將字串分割並存到list中

複合資料型態:字串

S = "AHH this is a string"
print(S.find("is"))
print(S.count("is"))

尋找某個子字串 find("你要找的東東")

還有算它出現了幾次count("你要算的東東")

看不懂沒關係 直接看範例

複合資料型態:字串

name = input("Name please?")
age = input("Age please?")
personal_id = input("ID please?")
print("So your name is {}, you are {} year(s) old, and your ID number is {}. ".format(name, age, personal_id))

當我們需要在固定的字串中間插入變數值

在字串要插入值的地方放入大括號 { }

在字串後面接上 .format( )

( )裡面依序填進要插入的變數

這種輸出方式稱為格式化輸出

複合資料型態:字典(dictionary)

en_to_french = {"red": "rouge", "blue": "bleu", "green": "vert"}
print("Red in French is {}.".format(en_to_french["red"])
print("Blue in French is {}.".format(en_to_french["blue"])
print("Green in French is {}.".format(en_to_french["green"])

字典,簡稱dict,是一種鍵(Key)-值(Value)資料型態

也就是說,我們可以用一個欄位的名稱

而非它的編號來操作它的值

範例中的en_to_french就是一個dictionary

在大括號裡用key:value的形式配對鍵-值

複合資料型態:字典(dictionary)

en_to_french = {"red": "rouge", "blue": "bleu", "green": "vert"}
en_to_french.update({"blue": "blue"})
en_to_french.update({"yellow": "jaune"})
print(en_to_french)

如果今天我想要將字典裡的東西做更改

可以使用 .update({"key":"value"})

其實就是在括號裡像初始化字典一樣指定新的值

看不懂沒關係 我們一樣來看範例

如果指定的值已存在就會取代原有值

否則就會新增一對新值在dict的最末端

複合資料型態:字典(dictionary)

en_to_french = {"red": "rouge", "blue": "bleu", "green": "vert", "yellow": "jaune"}
del en_to_french["blue"]
del en_to_french["red"]
print(en_to_french)

如果今天我想要刪除字典裡的東西

可以使用 del (注意:不用括號!)

寫法就是:del 字典名["key"]

看不懂沒關係 看範例你就懂了

del 會將它之後的變數、欄位、物件刪除

被刪除後便無法再做使用

進階實例觀摩

PyTorch(人工智慧)Numpy&Matplotlib(數據分析)Turtle(繪圖程式)

看到你們電腦上的這個酷東西了嗎

找到的話就給他點下去

然後請點擊那個Start下方第二個 開啟(open...)

然後選取剛剛在雲端硬碟裡下載的

chatbot_program_summer 或 turtle_demo

如果你選的是chatbot那個 要執行檔案請點擊chat.py的那個檔案

但兩個都是並點擊右上角的三角形播放圖案

選擇執行python檔案以執行

結束啦!

期待我們能在小社課上再會!

Minimal

By d11130110周月蘅