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莊智甯