Python
第一堂
講師介紹
-
pomelo
-
北一資研社長 × 學術
-
有事 dc 找,
我 ig 都不回訊息

Content
-
What is Python?
-
環境配置
-
Hello World! - 輸出
-
變數與運算
-
輸入
-
List, Tuple, Set - List
What is Python?


About Python
- Python 的創始人為吉多·范羅蘇姆,於 1989 年的聖誕節期間開發 Python
- 直譯式程式語言,意思是將程式碼一句一句直接執行,所以運行速度較慢
- Python 強調程式碼的可讀性和簡潔的語法,使用空格縮排來劃分程式碼塊
環境配置
Python IDE
- VS Code ( It's actually a text editor )
- PyCharm
- JuPyter ( Web )
VS Code


X
Download

Extension

Extension

Jupyter


Python Environment

依照作業系統下載
Python Environment

記得勾!!!
Hello World!
輸出
print("Hello World!")

執行結果:
第一行程式碼
輸出:print( )
print( ) 會輸出括號中的內容
print("I'm string") #string:用引號包起來
print(1) #int
print(1.1) #float
print([1, 2, 3]) #list(串列)

"#" 可以註解文字
輸出:print( )
print( ) 會輸出括號中的內容
並且換行
不要換行:
print("No line wrap ", end="")
print(":D")

end:預設為"\n" (換行符號),可以替換成任意字串
print("end:", end="orz")
print("好電")

輸出:print( )
如果要印出多項內容,可以用逗號分隔
print("Number:", 123, ":D")

每項內容會用空格分開

print("Number:", 123, ":D", sep="oh")
sep:預設為" " (空格),可以替換成任意字串
好玩ㄉ :D
import time
print("Loading", end='')
for i in range(10): #重複執行 10 次
print('.', flush=True, end='')
time.sleep(0.5) #延遲執行 0.5 秒
flush=False (預設值) 會等待該行完成後再輸出
flush=True 則會強制輸出
模擬 Loading 動畫
變數與運算
變數
一塊記憶體空間,含有了某種已知或未知的資訊量,並且配對了關聯的符號名稱
Variable
變數

有一個箱子
叫作 desserts
desserts

箱子裡裝了許多點心

desserts
可以想像成
變數


desserts
記憶體空間
變數名稱
值 (value)
變數


desserts
箱子裡的點心可以變換、增減
desserts =
desserts + pudding



可以對變數進行運算
desserts
變數
- 可以透過變數做運算
- 留意不要使用保留字
賦值
使用 "=" 為變數賦值
a = 1 #將變數a的值設為1
b = 3 #將變數b的值設為1
c = a + b #將變數c的值設為a與b的和
print(a, b, c) #1 3 4
也可以將字串、布林值等等賦值給變數
a = 1 #int
b = True #bool
c = "string" #string
d = [1, 2, 3] #list
print(type(a), type(b), type(c), type(d))
#<class 'int'> <class 'bool'> <class 'str'> <class 'list'>
{
資料型態
type( ):查看變數的資料型態
Assign
資料型態
int | 整數 |
float | 浮點數 |
str | 字串 |
bool | 布林值 (True / False) |
list | 串列 |
還有 tuple、dict...
資料型態
不同於 C++ 在宣告變數時需要先宣告型態,Python 支援「動態型別」(dynamic type)。
不需要宣告型別就可以直接存取任何型別的資料,而且在重新賦值的時候,可以存取和原型別不同的資料。
a = 1
print(f"a: {str(a):<5s}, type: {type(a)}")
a = "hello"
print(f"a: {a:<5s}, type: {type(a)}")

資料型態
電腦在執行時期做型別檢查,藉著存在變數裡的內容的型態來確定這個變數的型別。
因此執行速度會相對靜態型別語言慢。
多項變數賦值
若要宣告多項變數及賦值
可以使用 "," 分隔變數名稱及其值
a, b, c = 2, "hi", False
print(a, b, c) #2 hi False
運算
+ | 加 |
- | 減 |
* | 乘 |
/ | 除 |
// | 除 (向下取整) |
% | 取餘數 |
** | 次方 |
運算
a = 2 + 1 #3
b = 3 - 1 #2
c = a * b #3 * 2 = 6
d = a / b #3 / 2 = 1.5
e = a // b #1
f = a % b #1
g = a**b #3 的平方 = 9
#也可以寫成這樣
a += 1 #a = a + 1
b -= 1
c *= 1
d /= 1
e //= 0.3 #e = e // 0.3
f %= 1
g **= 2 #g = g ** 2
變數可以對數字做運算,也可以對變數運算
強制轉型
a = 6
b = 5
print(a/b, a//b, int(a/b), sep=", ") #1.2, 1, 1
a = -6
b = 5
print(a/b, a//b, int(a/b), sep=", ") #-1.2, -2, -1
int( ):無條件捨入至整數位
//:較小的最靠近整數
str( ) 可以將任意資料型態轉為字串
int( ) 可以將字串或數字轉為整數
強制轉型
int( ) 可以將字串或數字轉為整數
int(True) #1
int(False) #0
int(2.9) #2
int("3") #3
int("3.3") #報錯
字串內容只可為整數
變數命名規則
+ Coding Style

變數命名規則
- 好的變數命名可以使程式碼具有易讀性
- 不僅能夠讓別人明白你在寫什麼,也能讓自己方便理解
- 命名有意義 + 適當註解 :D
變數命名規則
#自我介紹
a = "pomelo"
b = "學妹來上中午小社:D"
c = 16
e = 200
#你想表達
print(f"我叫做{a}, 我今年 {c} 歲, 身高:{e}cm, 想對大家說的話: {b}")
#別人覺得你想表達
print(f"我叫做{b}, 我今年 {a} 歲, 身高:{c}cm, 想對大家說的話: {e}")
#自我介紹
name = "pomelo"
talk = "學妹來上中午小社:D" #想說的話
years = 16
height = 200
#正確表達
print(f"我叫做{name}, 我今年 {years} 歲, 身高:{height}cm, 想對大家說的話: {talk}")
X
✔

輸入
輸入:input( )
input( 提示訊息 )
text = input("Type sth...\n")
print(type(text)) #<class 'str'>
print(text)
text_int = int(input("Type numbers: "))
print(type(text_int)) #<class 'int'>
print(text_int)
input( ) 的預設資料型態為 str
可以使用 int( ) 強制轉型
List, Tuple, Set
List
List, Tuple, Set
list | 串列 |
tuple | 元組 (數組) |
set | 集合 |
可變 | 排序 | 索引 / 切片 | 相同元素 | |
---|---|---|---|---|
list | v | v | v | v |
tuple | x | v | v | v |
set | v | x | x | x |
List
- 類似於其他程式語言的 array (陣列)
- 以方括號 [] 將資料包起來
- 讓使用者以索引編號去存取值
- 索引值 (index) 從 0 開始
- 整數、字串、浮點數...都可以放在同個 list 中
lst = [3, "hello", 8, 1.1, 2]
print(lst[1]) #hello
print(lst[4]) #2
empty_lst = [] #空陣列
print(empty_lst) #[]
取值
一 / 多維陣列取值
#一維陣列
lst_1 = [1, 2, 3]
print(lst_1[1]) #2
#多維陣列
lst_2 = [1, [2, [3], 4, [5, 6]], 7]
print(lst_2[1][2]) #4
print(lst_2[1][1][0]) #3
負索引值
在 Python 中可以使用負數的索引值
倒數第一個元素為 -1,以此類推
lst = [1, [2, [3], 4], 5]
print(lst[-1]) #5
print(lst[-2][-1]) #4
print(lst[-2][-2][-1]) #3
串列長度
len( ):回傳串列長度
lst_1 = [1, 2, 3]
print(len(lst_1)) #3
lst_2 = [1, [2, [3], 4, [5, 6]], 7]
print(len(lst_2)) #3
#test
print(len(lst_2[1])) #?
print(len(lst_2[1][3])) #?
print(len([])) #?
改變元素值
lst = [1, [2, [3], 4], 5]
lst[1][0] = 7
print(lst) #[1, [7, [3], 4], 5]
lst[1] = 3
print(lst) #[1, 3, 5]
跟變數賦值類似
lst[3] = 1
#IndexError: list assignment index out of range
但要注意不能超出該串列範圍
List Slicing
list[起始位置索引值:結束位置索引值+1:間隔]
lst = [1, 2, 3, 4, 5, 6, 7, 8]
print(lst[1:5]) #[2, 3, 4, 5]
print(lst[:]) #[1, 2, 3, 4, 5, 6, 7, 8]
print(lst[3::]) #[4, 5, 6, 7, 8]
print(lst[:-3:]) #[1, 2, 3, 4, 5]
print(lst[::2]) #[1, 3, 5, 7]
print(lst[1:-2:2]) #[2, 4, 6]
print(lst[::]) #[1, 2, 3, 4, 5, 6, 7, 8]
可以不放數值,沒有填入的會用預設值
List Slicing
list[起始位置索引值:結束位置索引值+1:間隔]
lst = [1, 2, 3, 4, 5, 6, 7, 8]
lst[1:3] = ["a", "b"] #[1, 'a', 'b', 4, 5, 6, 7, 8]
lst[2:-1:2] = ["c", "d", "e"] #[1, 'a', 'c', 4, 'd', 6, 'e', 8]
#Change the second and third value by replacing it with one value
lst[1:3] = ["e"] #[1, 'e', 4, 'd', 6, 'e', 8]
可以利用 slice 來修改值
添加元素
lst = [1, 2, 3]
lst.append('a') #[1, 2, 3, 'a']
lst.append(['b', 'c']) #[1, 2, 3, 'a', ['b', 'c']]
#insert(index, value)
lst.insert(1, "i") #[1, 'i', 2, 3, 'a', ['b', 'c']]
append( ):添加元素到串列末尾
insert( ):添加元素到指定位置
刪除元素
lst = ['a', 'b', 'c', 'a', 'd']
lst.remove('a') #['b', 'c', 'a', 'd']
lst.pop(2) #['b', 'c', 'd']
lst.pop() #['b', 'c']
remove( ):刪除特定值
pop( ):刪除特定位置 (index)
若在串列中有多個相同值
remove( ) 只會刪除第一個找到的值
若 pop( ) 沒有指定 index
會刪除預設值,也就是最後一個元素
刪除元素
lst = ['a', 'b', 'c', 'a', 'd']
del lst[2] #['a', 'b', 'a', 'd']
del lst[:3:2] #['b', 'd']
lst.clear() #[]
del lst #刪除 lst 這個變數
print(lst) #NameError: name 'lst' is not defined.
del:刪除特定位置 (index)
clear( ):清空串列內容
連接串列
lst_1 = [1, 2, 3]
lst_2 = [4, 5, 6]
lst_1.extend(lst_2)
print(lst_1) #[1, 2, 3, 4, 5, 6]
extend( ):在串列末尾連接另一個串列
也可以用 "+" 連接
lst_1 = [1, 2, 3]
lst_2 = [4, 5, 6]
lst_1 += lst_2
print(lst_1) #[1, 2, 3, 4, 5, 6]
排序串列
sort( ):將元素由小到大排序
lst = [4, 5, 2, 5, 1]
lst.sort()
print(lst) #[1, 2, 4, 5, 5]
lst = ["Python", "is", "not", "a", "python"]
lst.sort()
print(lst) #['Python', 'a', 'is', 'not', 'python']
lst = [1, 2, 4, "hello"]
lst.sort()
#TypeError: '<' not supported between instances of 'str' and 'int'
若 list 中的元素資料型態為 string
會依照第一個字元的 ASCII code 做排序
若第一個字元相同,則會比較第二個,以此類推
不同資料型態不能比較
ASCII code
- 在電腦中,所有的資料在儲存和運算時都要使用二進制表示
- 包括數字、字母、特殊符號等
- 美國標準化組織推出了 ASCII 編碼,確保每台電腦使用相同的編碼規則
- 大寫字母的 ASCII code 比小寫字母的小
- ASCII Table
排序串列
sort(reverse=True):將元素由大到小排序
lst = [4, 5, 2, 5, 1]
lst.sort(reverse=True)
print(lst) #[5, 5, 4, 2, 1]
lst = ["Python", "is", "not", "a", "python"]
lst.sort(reverse=True)
print(lst) #['python', 'not', 'is', 'a', 'Python']
sort( ) 也可以將 list 中的 list 排序
lst = [[5, 3], [2, 3, 4], [2, 4], [2, 3]]
lst.sort()
print(lst) #[[2, 3], [2, 3, 4], [2, 4], [5, 3]]
反轉串列
reverse( ):反轉元素目前的排序順序
lst = [4, 5, 2, 5, 1]
lst.reverse()
print(lst) #[1, 5, 2, 5, 4]
lst = ["Python", "is", "not", "a", "python"]
lst.reverse()
print(lst) #['python', 'a', 'not', 'is', 'Python']
lst = [[5, 3], [2, 3, 4], [2, 4], [2, 3]]
lst.reverse()
print(lst) #[[2, 3], [2, 4], [2, 3, 4], [5, 3]]
元素位置
index( ):回傳元素在串列中的位置
lst = [4, 5, 2, 5, 1]
print(lst.index(4)) #0
print(lst.index(5)) #1
print(lst.index(3)) #ValueError
lst = [[1, 2], [3, 5], [4, 6]]
print(lst.index([1, 2])) #0
print(lst.index(1)) #ValueError
若在串列中有多個相同值
index( ) 會回傳第一個
出現次數
count( ):回傳元素在串列中出現的次數
lst = [4, 5, 2, 5, 1]
print(lst.count(4)) #1
print(lst.count(5)) #2
print(lst.count(3)) #0
lst = [[1, 2], [3, 5], [4, 6]]
print(lst.count([1, 2])) #1
print(lst.count(1)) #0
in / not in
in:回傳該元素是否在串列中
not in:回傳該元素是否不在串列中
lst = [4, 5, 2, 5, 1]
print(4 in lst) #True
print(3 in lst) #False
print(3 not in lst) #True
lst = [[1, 2], [3, 5], [4, 6]]
print([1, 2] in lst) #True
print(1 not in lst) #True
max / min
max( ):回傳該串列中的最大值
min( ):回傳該串列中的最小值
lst = [4, 5, 2, 5, 1]
print(max(lst)) #5
print(min(lst)) #1
lst = [[1, 2], [3, 5], [4, 6], [1, 1]]
print(max(lst)) #[4, 6]
print(min(lst)) #[1, 1]
lst = ["apple", "ant", "banana"]
print(max(lst)) #banana
print(min(lst)) #ant
lst = ["apple", "ant", 1, 2]
print(max(lst)) #TypeError
若串列中有不同資料型態會報錯
sum
sum( ):加總所有元素數值
lst = [2, 4, 6]
print(sum(lst)) #12
lst = []
print(sum(lst)) #0
lst = [1.2, 9.4, 1]
print(sum(lst)) #11.6
lst = ['hi', 2, 4]
print(sum(lst))
#TypeError: unsupported operand type(s) for +: 'int' and 'str'
只能整數 / 浮點數相加
複製元素
*:將 list 的內容乘倍
lst = [4, 5]
lst *= 3
print(lst) #[4, 5, 4, 5, 4, 5]
lst = [2, 4, 6]
lst = lst + lst[1:3] * 2
print(lst) #[2, 4, 6, 4, 6, 4, 6]
#test
lst = [1, 2, 3]
lst[0:2] *= 2
print(lst) #?
Function
統整
append( ) | list 函式 | 無回傳值 |
insert( ) | list 函式 | 無回傳值 |
pop( ) | list 函式 | 回傳被移除值 |
remove( ) | list 函式 | 無回傳值 |
del | Python 內建 | 無回傳值 |
clear( ) | list 函式 | 無回傳值 |
extend( ) | list 函式 | 無回傳值 |
len( ) | Python 內建 | 回傳長度 |
sort( ) | list 函式 | 無回傳值 |
reverse( ) | list 函式 | 無回傳值 |
max( ) / min( ) | Python 內建 | 回傳最大 / 最小值 |
sum( ) | Python 內建 | 回傳加總值 |
in / not in | Python 內建 | 回傳 True / False |
index( ) | list 函式 | 回傳 index |
count( ) | list 函式 | 回傳出現次數 |
int( ) / str( ) ... | Python 內建 | 回傳改變型態值 |
題目
Zerojudge
a, b = input().split()
結束啦 :D
Python - 1
By d11231621莊智甯
Python - 1
- 365