Python
by 洪翠憶
PYTHON
Content
課程內容
PYTHON
-
基本語法(
三兩堂課解決)- 輸入/輸出
- 資料型態
- 條件判斷
- 迴圈
- 函式
- ...
-
函式庫
- numpy
- matplotlib
- pytorch
- pandas
- ...
-
稍難的語法
- 容器
- class
- 迭代器
- 正規表示式
- ...
Rule
課堂規則
PYTHON
-
一定要聽課
-
有問題可以直接問(開麥/打字都可以)
-
如果可以的話,上課期間讓電腦在你旁邊
-
需要請假的話不用告知
-
有空記得上機練習
-
可以拿講師做梗圖
Introduction
講師簡介
PYTHON
洪翠憶
中山女高資訊研究社(楓資)
程式教學學長
Discord:KonoDioDa
FB/IG/Line/Google:洪翠憶
程式語言:C++、Python
興趣:看動漫、玩手機、寫程式
請多指教!
Q&A
大家給我的話~(截至今日6:30pm)
PYTHON
Q&A
大家給我的話~(截至2021/10/25)
PYTHON
Feature and IDE
PYTHON
Feature
Python的特色
PYTHON
-
支援多種編寫方式
-
強制縮排、自動記憶體管理
-
應用於大數據分析、物聯網、人工智慧等等
-
豐富函式庫
-
執行較慢
雖然大家都知道這些
不過不講好像太不負責
還是講一下好了
Comment
Python註解方式
PYTHON
#單行註解
"""
多行註解
('或"都可以)
"""
Python IDE
Python編輯器
PYTHON
Resource
幫助精進Python的網頁
PYTHON
接下來這個學期
一起加油吧!
Basic Syntax
PYTHON
Data Type
PYTHON
PYTHON
數值:int, float, complex
文字:str, chr
容器:list, tuple, range
字典:dict
集合:set, frozenset
布林:bool
二進位:bytes, bytearray, memoryview
Numeric Type
數值型態
PYTHON
-
int
- 整數
- 例:5, 19, ...
-
float
- 浮點數
- 可存e指數
- 由於硬體限制無法非常精準
- 例:3.14, 1.496e11, ...
-
complex
- 複數(虛數運算)
- 用j表示(數學中通常用i表示)
- 例:8j, (2+3j), complex(2, 3), ...
Text Type
文字型態
PYTHON
-
str
- 字串
- 用「'」或「"」括起
- 可用切片(slice)選取內容
- 不是字元陣列
- 例:"hello", 'a', ...
-
chr
- 字元
- 例:chr(65), ...
Sequence Type
容器型態
PYTHON
-
list
- 串列
- 可用切片(slice)選取內容
- 內容以[]包住
- 例:[1, 2], ["hi", "hello"], ...
-
tuple
- 元組
- 可用切片(slice)選取內容
- 內容以()包住(也可不用())
- 內容不允許被修改、刪除
- 例:(1, 2), ("hi", "hello"), ...
-
range
- range(<頭 *預設為0>, [尾 *不含自己], <增加 *預設為1>)
- 例:range(2), range(1, 10, 2), ...
Mapping Type
映射型態
PYTHON
-
dict
- 字典
- 由鍵(key)與值(value)組成
- 內容以{}括住
- 可新增、更新、刪除資料
- 支援迭代器(iterator)
- 例:{"taiwan" : "taipei", "japan" : "tokyo"}, ...
Set Type
集合型態
PYTHON
-
set
- 集合
- 無順序
- 內容以{}括住
- 可新增、更新、刪除資料
- 例:{1, 2, 3}, {"dog", "cat", "rabbit"}, ...
-
frozenset
- 與集合幾乎一樣
- 無法改變資料
- 例:frozenset({1, 2, 3}), ...
Boolean Type
布林型態
PYTHON
-
bool
- 布林
- 只有True, False
- 只有 False, None, 0, "", (), [], {} 會回傳False
- 例:True, 3>5, ...
Binary Type
位元型態
PYTHON
-
bytes
- 位元組
- bytes(大小或內容)
- 例:bytes([1, 2]), b"hi", ...
-
bytearray
- 位元組陣列
- 可以改變
- 例:bytearray([1, 2]), ...
-
memoryview
- 可用slice
- 可以改變
- 例:memoryview(bytes([1, 2])), ...
Operator
PYTHON
PYTHON
and vs or
"和"與"或"的比較
PYTHON
-
and: 所有條件都要成立
-
or: 其中一項條件有成立即可
Input/ Output/ Variable
PYTHON
print()
輸出
PYTHON
-
*objs: 輸出內容
-
sep: 分隔符號
-
end: 結束符號
-
file: 被寫入的檔案
-
flush: 是否刷新
print(*objs, sep=' ', end='\n', file=sys.stdout, flush=False)
input()
輸入
PYTHON
-
*prompt: 提示訊息
-
輸入值為字串
input(*prompt)
variable
變數
PYTHON
-
變數名稱可用字母、數字、底線
-
名稱不可以數字開頭
-
可一次宣告多個變數
-
沒有宣告關鍵字
-
宣告後可改型態
-
區分大小寫
Conditions
PYTHON
if-else
if條件式
PYTHON
if 條件式:
陳述句
陳述句
elif 條件式:
陳述句
陳述句
else:
陳述句
陳述句
if-else
其他的寫法
PYTHON
變數名稱 = (條件) and True的回傳值 or False的回傳值
變數名稱 = [False的回傳值, True的回傳值][條件]
變數名稱 = True的回傳值 if 條件 else False的回傳值
nested
巢狀用法
PYTHON
Loop
PYTHON
while
while迴圈
PYTHON
while 條件:
陳述句
條件為true時跑迴圈
for
for迴圈
PYTHON
for 變數 in 序列:
陳述句
序列可為list, dict, tuple, set或字串
break & continue
break vs continue
PYTHON
break: 跳脫整個迴圈
continue: 跳過此次迴圈
else
迴圈的else
PYTHON
若完整執行迴圈沒遇到break時,會執行else內的語句
Function
PYTHON
define a function
宣告函式
PYTHON
-
函式名稱可用字母、數字、底線
-
名稱不可以數字開頭
-
區分大小寫
def 函式名稱(參數1, 參數2, ...):
陳述句
陳述句
call a function
呼叫函式
PYTHON
-
無論該函式是否有參數,都須打()
return & pass
return跟pass的用法
PYTHON
-
return: 回傳一個值並結束函式
-
pass: 為了不讓空白函式執行錯誤而填入的
argument
函數的參數
PYTHON
def arbitrary_argument(*參數名稱):
pass #不受宣告參數數量限制
def arbitrary_keyword_arguments(**參數名稱):
pass #不受宣告參數數量限制外,可以像dict一樣自訂索引值
def default_parameter_value(參數名稱 = 參數預設值):
pass #可以先設定參數預設值
-
可以是任何型態
-
用「,」分隔每個參數
recursion
遞回
PYTHON
-
函式自己呼叫自己
practice
練習題
PYTHON
https://snakify.org/en/lessons/functions/problems/negative_power/
題目:
給定一個正實數 a 和整數 n,請計算a的n次方。
編寫一個函數 power(a, n) ,使用該函數計算結果並打印表達式的結果。
不要使用標準庫中的相同函數。
answer
參考解答
PYTHON
def power(a, n):
if n == 0:
return 1
elif n < 0:
return 1 / (a * power(a, -n-1))
else:
return a * power(a, n-1)
print(power(float(input()), int(input())))
practice
練習題
PYTHON
https://snakify.org/en/lessons/functions/problems/fibonacci_rec/
題目:
給定一個非負整數 n,打印第 n 個費氏數列的值。 為此,請編寫一個函數 fib(n),該函數採用非負整數 n 並返回第 n 個費氏數列的值。
不要使用迴圈,而是使用遞迴。 但是,您應該考慮為什麼遞迴方法比使用迴圈慢得多。
answer
參考解答
PYTHON
def fib(n):
if n == 1 or n == 2:
return 1
else:
return fib(n-1) + fib(n-2)
print(fib(int(input())))
List
PYTHON
create a list
宣告串列
PYTHON
-
命名規則與變數相同
-
內容有編號、有順序、可改值、可重複出現
-
可將不同型態的值存入同個陣列
-
內容用[]括起
串列名稱 = [值0, 值1, ...]
slice
切片
PYTHON
-
可用於串列、字串
-
有頭無尾
變數 = 串列/字串[開始:結束:間隔]
change list items
改變串列元素
PYTHON
串列[要修改的範圍(slice)] = [值, ...]
串列.append(值) #在串列最後新增值
串列.insert(索引值, 值) #在串列指定索引值的地方新增值
串列.extend(另一個串列) #在串列最後合進去另一個串列
串列.remove(值) #刪除串列中指定的值
串列.pop() #刪除串列中最後面的值
串列.clear() #清空串列
del 串列 #徹底刪除串列
+ and * in list
串列的+和*
PYTHON
-
+:合併串列
-
*:合併n次串列
split and join
與字串的轉型
PYTHON
變數 = 字串.split(分隔符號)#字串轉串列
變數 = 分隔符號.join(串列) #串列轉字串
operations on list
串列的一些操作
PYTHON
變數 = 串列.count(值) #數值在串列中出現幾次
變數 = 串列.index(值) #值在串列中的索引值
值 in 串列/值 not in 串列 #串列中有/沒有值,回傳值為布林
變數 = max(串列) #串列中的最大值
變數 = min(串列) #串列中的最小值
other methods
其他串列的方法
PYTHON
變數 = 串列.copy()#將串列的值複製一份到新的串列
串列.reverse() #反轉串列
串列.sort() #排序串列
變數 = len(串列) #串列長度
for in list
串列搭配for迴圈
PYTHON
串列 = [值 for 變數 in 序列]
串列 = [值 for 變數 in 序列 if 條件]
practice
練習題
PYTHON
https://snakify.org/en/lessons/lists/problems/even_indices/
題目:
給定一串數字,裝入串列並打印索引值為偶數的所有串列元素。 (例: A[0]、A[2]、A[4]、...)。
answer
參考解答
PYTHON
a = [int(i) for i in input().split()]
for i in range(0, len(a), 2):
print(a[i])
practice
練習題
PYTHON
https://snakify.org/en/lessons/lists/problems/greater_than_neighbours/
題目:
給定一串數字,存入串列並打印符合條件的元素的數量:大於它們兩個隔壁(鄰居)元素的元素。
不應考慮串列的第一項和最後一項,因為它們沒有兩個鄰居。
answer
參考解答
PYTHON
a = [int(i) for i in input().split()]
b = 0
for i in range(1, len(a)-1):
if a[i - 1] < a[i] and a[i + 1] < a[i]:
b += 1
print(b)
practice
練習題
PYTHON
https://snakify.org/en/lessons/two_dimensional_lists_arrays/problems/scale_matrix/
題目:
給定兩個正整數 m 和 n,之後的輸入有m 行 n 個元素,給出一個 m×n 矩陣 (二維串列)A,最後一行輸入一個整數 c,將矩陣的每個元素乘以 c 並打印結果。
answer
參考解答
PYTHON
l1 = [int(i) for i in input().split()]
A = [[int(i) for i in input().split()] for i in range(l1[0])]
l2 = int(input())
for i in range(l1[0]):
for j in range(l1[1]):
A[i][j] = A[i][j] * l2
print(" ".join([str(l2) for l2 in A[i]]))
practice
練習題
PYTHON
https://snakify.org/en/lessons/two_dimensional_lists_arrays/problems/2d_max/
題目:
給定兩個整數表示行和列 (m×n),以及後續 m 行的 n 個元素,找到最大元素的索引位置並打印兩個值表示索引(i×j,行號和列號的索引值)。如果不同行中存在多個這樣的元素,則打印行號較小的那個。 如果同一行出現多個這樣的元素,則輸出最小的列號。
answer
參考解答
PYTHON
b = [int(i) for i in input().split()]
a = [[int(i) for i in input().split()] for j in range(b[0])]
c = a[0][0]
d = [0, 0]
for k in range(b[0]):
for l in range(b[1]):
if a[k][l] > c:
c = a[k][l]
d[0], d[1] = k, l
print(" ".join(str(i) for i in d))
Tuple
PYTHON
create a tuple
宣告元組
PYTHON
-
命名規則與變數相同
-
內容有順序、不可改值、可重複出現相同值
-
可將不同型態的值存入同個tuple
-
可用slice、join()、+、*
-
內容用()括起
tuple名稱 = (值0, 值1, ...)
operations/methods on tuple
元組的一些操作、方法
PYTHON
變數 = tuple名稱.count(值) #數值在tuple中出現幾次
變數 = tuple名稱.index(值) #值在tuple中的索引值
值 in tuple名稱/值 not in tuple名稱 #tuple中有/沒有值,回傳值為布林
變數 = len(tuple名稱) #取tuple大小
變數 = max(tuple名稱) #tuple中的最大值
變數 = min(tuple名稱) #tuple中的最小值
Set
PYTHON
Appendix
PYTHON
ASCII Code
ASCII碼
PYTHON
Reference
PYTHON
PYTHON
https://www.pcschool.com.tw/blog/it/what-is-python
https://www.uuu.com.tw/Public/content/Edm/20191219_Pythonall.htm#page-2
https://www.796t.com/article.php?id=133425
https://www.w3schools.com/python/
https://atedev.wordpress.com/2008/03/21/python-%E8%88%87%E8%A4%87%E6%95%B8%E8%A8%88%E7%AE%97/
https://medium.com/@virginiakm1988
https://zh.m.wikibooks.org/zh-tw/Python/%E5%85%83%E7%BB%84
https://www.mathcs.emory.edu/~valerie/courses/fall10/155/resources/op_precedence.html
PYTHON
Copy of python
By yennnn
Copy of python
- 363