by 洪翠憶
PYTHON
課程內容
PYTHON
課堂規則
PYTHON
講師簡介
PYTHON
中山女高資訊研究社(楓資)
程式教學學長
Discord:KonoDioDa
FB/IG/Line/Google:洪翠憶
程式語言:C++、Python
興趣:看動漫、玩手機、寫程式
請多指教!
大家給我的話~(截至今日6:30pm)
PYTHON
大家給我的話~(截至2021/10/25)
PYTHON
PYTHON
Python的特色
PYTHON
雖然大家都知道這些
不過不講好像太不負責
還是講一下好了
Python註解方式
PYTHON
#單行註解
"""
多行註解
('或"都可以)
"""
Python編輯器
PYTHON
幫助精進Python的網頁
PYTHON
接下來這個學期
一起加油吧!
PYTHON
PYTHON
數值型態
PYTHON
文字型態
PYTHON
容器型態
PYTHON
映射型態
PYTHON
集合型態
PYTHON
布林型態
PYTHON
位元型態
PYTHON
PYTHON
PYTHON
"和"與"或"的比較
PYTHON
PYTHON
輸出
PYTHON
print(*objs, sep=' ', end='\n', file=sys.stdout, flush=False)
輸入
PYTHON
input(*prompt)
PYTHON
變數
PYTHON
全域變數 vs 區域變數
PYTHON
PYTHON
if條件式
PYTHON
if 條件式:
陳述句
陳述句
elif 條件式:
陳述句
陳述句
else:
陳述句
陳述句
其他的寫法
PYTHON
變數名稱 = (條件) and True的回傳值 or False的回傳值
變數名稱 = [False的回傳值, True的回傳值][條件]
變數名稱 = True的回傳值 if 條件 else False的回傳值
巢狀用法
PYTHON
PYTHON
while迴圈
PYTHON
while 條件:
陳述句
for迴圈
PYTHON
for 變數 in 序列:
陳述句
break vs continue
PYTHON
迴圈的else
PYTHON
PYTHON
宣告函式
PYTHON
def 函式名稱(參數1, 參數2, ...):
陳述句
陳述句
呼叫函式
PYTHON
return跟pass的用法
PYTHON
函數的參數
PYTHON
def arbitrary_argument(*參數名稱):
pass #不受宣告參數數量限制
def arbitrary_keyword_arguments(**參數名稱):
pass #不受宣告參數數量限制外,可以像dict一樣自訂索引值
def default_parameter_value(參數名稱 = 參數預設值):
pass #可以先設定參數預設值
遞回
PYTHON
練習題
PYTHON
https://snakify.org/en/lessons/functions/problems/negative_power/
給定一個正實數 a 和整數 n,請計算a的n次方。
編寫一個函數 power(a, n) ,使用該函數計算結果並打印表達式的結果。
不要使用標準庫中的相同函數。
參考解答
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())))
練習題
PYTHON
https://snakify.org/en/lessons/functions/problems/fibonacci_rec/
給定一個非負整數 n,打印第 n 個費氏數列的值。 為此,請編寫一個函數 fib(n),該函數採用非負整數 n 並返回第 n 個費氏數列的值。
不要使用迴圈,而是使用遞迴。 但是,您應該考慮為什麼遞迴方法比使用迴圈慢得多。
參考解答
PYTHON
def fib(n):
if n == 1 or n == 2:
return 1
else:
return fib(n-1) + fib(n-2)
print(fib(int(input())))
PYTHON
Python lambda 介紹
PYTHON
變數 = lambda 參數1, 參數2, ...: 表示式
Python lambda 的應用
PYTHON
filter(lambda 參數: 表示式, 序列)
#回傳符合表示式條件的序列內容
map(lambda 參數: 表示式, 序列)
#回傳經過表示式運算的序列內容
sorted(序列, key = lambda 參數: 表示式)
#可用lambda寫sorted的key
Python lambda 和 function 的比較
PYTHON
function | lambda | |
---|---|---|
是否需要定義名稱 | v | x |
是否可以擁有多行運算式 | v | x |
回傳結果方式 | 遇到return關鍵字時 | 運算完自動回傳 |
PYTHON
try-except語法
PYTHON
try:
欲嘗試的程式碼
except 錯誤類型(選填):
上述程式無法執行時執行的程式碼
try:
陳述句
except:
陳述句
else:
try的陳述句可順利執行時也執行這句
try:
陳述句
except:
陳述句
finally:
try-except檢查完時執行這句
語法
PYTHON
raise 錯誤種類(顯示訊息)
(錯誤種類列表見附錄)
PYTHON
物件導向程式設計概念
PYTHON
類別與物件的關係
PYTHON
class語法、如何建立與使用物件
PYTHON
class 類別名稱:
def __init__(self, 其他屬性):
建構式內容
def 方法名稱(self, 其他參數):
方法內容
內容
物件名稱 = 類別名稱(建構式的屬性)
物件名稱.方法名稱(參數1, 參數2, ...)
建構式
PYTHON
類別裡的方法
PYTHON
類別的繼承
PYTHON
class 子類別名稱(父類別):
def __init__(self, 其他屬性):
父類別.__init__(self, 其他屬性) #super().__init__(self, 其他屬性)
其他建構式內容
def 方法名稱(self, 其他參數):
方法內容
範例
PYTHON
PYTHON
迭代器介紹
PYTHON
用class創造迭代器
PYTHON
PYTHON
宣告串列
PYTHON
串列名稱 = [值0, 值1, ...]
切片
PYTHON
變數 = 串列/字串[開始:結束:間隔]
改變串列元素
PYTHON
串列[要修改的範圍(slice)] = [值, ...]
串列.append(值) #在串列最後新增值
串列.insert(索引值, 值) #在串列指定索引值的地方新增值
串列.extend(另一個序列) #在串列最後合進去另一個序列
串列.remove(值) #刪除串列中指定的值
串列.pop() #刪除串列中最後面的值
串列.clear() #清空串列
del 串列 #徹底刪除串列
串列的+和*
PYTHON
與字串的轉型
PYTHON
變數 = 字串.split(分隔符號)#字串轉串列
變數 = 分隔符號.join(串列) #串列轉字串
串列的一些操作
PYTHON
變數 = 串列.count(值) #數值在串列中出現幾次
變數 = 串列.index(值) #值在串列中的索引值
值 in 串列/值 not in 串列 #串列中有/沒有值,回傳值為布林
變數 = max(串列) #串列中的最大值
變數 = min(串列) #串列中的最小值
其他串列的方法
PYTHON
變數 = 串列.copy()#將串列的值複製一份到新的串列
串列.reverse() #反轉串列
串列.sort() #排序串列
變數 = len(串列) #串列長度
串列搭配for迴圈
PYTHON
串列 = [值 for 變數 in 序列]
串列 = [值 for 變數 in 序列 if 條件]
練習題
PYTHON
https://snakify.org/en/lessons/lists/problems/even_indices/
給定一串數字,裝入串列並打印索引值為偶數的所有串列元素。 (例: A[0]、A[2]、A[4]、...)。
參考解答
PYTHON
a = [int(i) for i in input().split()]
for i in range(0, len(a), 2):
print(a[i])
練習題
PYTHON
https://snakify.org/en/lessons/lists/problems/greater_than_neighbours/
給定一串數字,存入串列並打印符合條件的元素的數量:大於它們兩個隔壁(鄰居)元素的元素。
不應考慮串列的第一項和最後一項,因為它們沒有兩個鄰居。
參考解答
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)
練習題
PYTHON
https://snakify.org/en/lessons/two_dimensional_lists_arrays/problems/scale_matrix/
給定兩個正整數 m 和 n,之後的輸入有m 行 n 個元素,給出一個 m×n 矩陣 (二維串列)A,最後一行輸入一個整數 c,將矩陣的每個元素乘以 c 並打印結果。
參考解答
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]]))
練習題
PYTHON
https://snakify.org/en/lessons/two_dimensional_lists_arrays/problems/2d_max/
給定兩個整數表示行和列 (m×n),以及後續 m 行的 n 個元素,找到最大元素的索引位置並打印兩個值表示索引(i×j,行號和列號的索引值)。如果不同行中存在多個這樣的元素,則打印行號較小的那個。 如果同一行出現多個這樣的元素,則輸出最小的列號。
參考解答
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))
練習題
PYTHON
參考解答
PYTHON
n = int(input())
h = [int(i) for i in input().split()]
ans = 0
for i in range(n):
if h[i] == 0:
if i == 0:
ans += h[1]
elif i == n-1:
ans += h[n-2]
else:
ans += [h[i-1], h[i+1]][h[i+1] < h[i-1]]
print(ans)
PYTHON
宣告元組
PYTHON
tuple名稱 = (值0, 值1, ...)
元組的一些操作、方法
PYTHON
變數 = tuple名稱.count(值) #數值在tuple中出現幾次
變數 = tuple名稱.index(值) #值在tuple中的索引值
值 in tuple名稱/值 not in tuple名稱 #tuple中有/沒有值,回傳值為布林
變數 = len(tuple名稱) #取tuple大小
變數 = max(tuple名稱) #tuple中的最大值
變數 = min(tuple名稱) #tuple中的最小值
PYTHON
宣告集合
PYTHON
集合名稱 = {值0, 值1, ...}
集合的運算子
PYTHON
集合 = 集合A | 集合B #A與B的聯集
集合 = 集合A.union(集合B)
集合 = 集合A & 集合B #A與B的交集
集合 = 集合A.intersection(集合B)
集合 = 集合A - 集合B #A對B的差集
集合 = 集合A.difference(集合B)
集合 = 集合A ^ 集合B #A與B兩者的差集和(聯集-交集)
集合 = 集合A.symmetric_difference(集合B)
集合A.isdisjoint(集合B) #如果A與B之間沒有交集,回傳True
集合的運算子
PYTHON
集合A <= 集合B #集合A是否為集合B的子集合,回傳值為布林
集合A.issubset(集合B)
集合A >= 集合B #集合B是否為集合A的子集合,回傳值為布林
集合A.issuperset(集合B)
值 in 集合/值 not in 集合 #集合中有/沒有值,回傳值為布林
變數 = max(集合) #串列中的最大值
變數 = min(集合) #串列中的最小值
改變集合元素
PYTHON
集合.update(另一個序列) #在集合中合進去另一個序列
集合A |= 集合B #用運算子的寫法,但只適用於集合對集合
集合.intersection_update(另一個序列) #將集合更新成與另一序列的交集
集合A &= 集合B
集合.difference_update(另一個序列) #將集合中與另一個序列的交集移除
集合A -= 集合B
集合.symmetric_difference_update(另一個序列) #將集合更新成兩者的差集和
集合A ^= 集合B
改變集合元素
PYTHON
集合.add(值) #在集合最後新增值
集合.remove(值)
#刪除集合中指定的值,如果沒有該值,"會"回傳錯誤訊息
集合.discard(值)
#刪除集合中指定的值,如果沒有該值,"不會"回傳錯誤訊息
集合.pop()
#刪除集合中最後面的值,但你並不知道最後的值是什麼:)
集合.clear() #清空集合
del 集合 #徹底刪除集合
其他集合的方法
PYTHON
變數 = 集合.copy()#將集合的值複製一份到新的集合
變數 = len(集合) #集合長度
PYTHON
宣告字典
PYTHON
dict名稱 = {
鍵1 : 值1,
鍵2 : 值2, ...
}
宣告字典
PYTHON
字典名稱 = dict(鍵1 = 值1, 鍵2 = 值2, ...)
字典名稱 = dict([(鍵1, 值1), (鍵2, 值2), ...])
#此時的鍵不能有引號且受限於變數命名規則
字典名稱 = dict(zip([鍵1, 鍵2, ...], [值1, 值2, ...]))
字典名稱 = dict.fromkeys((鍵1, 鍵2, ...), 值)
取得字典元素
PYTHON
變數 = 字典[鍵] #以key取值
變數 = 字典.get(鍵)
變數 = 字典.keys() #取得dict所有的key
變數 = 字典.values() #取得dict所有的value
變數 = 字典.items() #取得dict所有的元素,每對以tuple呈現
改變字典元素
PYTHON
字典.update(另一個字典) #在字典後加入字典
字典[新的鍵] = 新的值 #在字典後新增這組
#修改值的方法就用覆蓋的
字典.pop(鍵) #刪除指定鍵的值
字典.popitem() #刪除最後一組元素
字典.clear() #清空字典
del 字典 #刪掉整個字典
其他字典的方法
PYTHON
變數 = 字典.copy()
變數 = len(字典)
變數 = 字典.setdefault(鍵, 值)
#如果key已存在的話,回傳該值,否則新增這筆元素並回傳值
PYTHON
PYTHON
list | tuple | set | dict | |
---|---|---|---|---|
是否有編號 | v | v | x | 自訂key |
是否有順序 | v | v | x | v |
值是否可重複出現 | v | v | x | (value可以key不行) |
是否可改值 | v | x | v | v |
被什麼括起 | [] | () | {} | {} |
是否可用slice | v | v | x | x |
PYTHON
模組的類型
PYTHON
可直接引入
sys.path查的到存放路徑
建立後可直接引入
使用前得先下載(可用PIP)
下載完成即可引入
語法
PYTHON
import 模組
變數 = 模組.方法()
變數 = dir(模組) #查看模組的所有內容
import 模組 as 暱稱
變數 = 暱稱.方法()
from 模組 import 方法
變數 = 方法()
from 模組 import * #匯入該模組所有內容
變數 = 方法()
(以math做示範)
pip指令
PYTHON
>pip --version
>pip install 模組
>pip uninstall 模組
>pip list
使用自訂模組與第三方模組示範影片
PYTHON
(00:30~02:30), (07:10~09:25)
python內建模組列表
PYTHON
PYTHON
正規表示式
PYTHON
import re
變數 = re.compile("正規表示式")
#建立regex比較格式的物件
變數 = re.findall("正規表示式", 字串)
#回傳一個串列,內容為字串中符合格式的所有字串
變數 = re.finditer("正規表示式", 字串)
#回傳上述內容的迭代器
re的方法
PYTHON
變數 = re.fullmatch("正規表示式", 字串)
#整串字串符合格式時回傳該物件,沒有時回傳None
變數 = re.match("正規表示式", 字串)
#字串開頭符合格式時回傳該物件,沒有時回傳None
變數 = re.search("正規表示式", 字串)
#回傳第一批符合格式該物件,沒有時回傳None
變數 = re.split("正規表示式", 字串)
#回傳分隔合規字串間的符號
變數 = re.sub("正規表示式", 取代字串, 字串)
#將合規字串用取代字串取代掉後,回傳該字串
變數 = re.subn("正規表示式", 取代字串, 字串)
#回傳tuple,內有上述內容與修改數量
中介字元
PYTHON
. 除了新行符號外的任何字元
^ 字串開頭的子字串或排除指定字元或群組
$ 字串結尾的子字串
* 單一字元或群組出現任意次數
+ 單一字元或群組出現至少一次
? 單一字元或群組0或1次
{m,n} 單一字元或群組的m到n倍數
[] 對中括弧內的字元形成集合
\ 跳脫字元
| 單一字元或群組的或
() 對小括弧內的字元形成群組
特別序列
PYTHON
\number 群組的序數
\A 字串的開頭字元
\b 作為單字的界線字元
\B 作為字元的界線字元
\d 數字,從0到9
\D 非數字
\s 各種空白符號,包括新行符號\n
\S 非空白符號
\w 任意文字字元,包括數字
\W 非文字字元,包括空白符號
\Z 字串的結尾字元
PYTHON
字串.format(參數1, 參數2 ...)
f字串
詳細說明
PYTHON
符號 | 說明 |
---|---|
{:,} | 用,分隔的數字格式 |
{:.α%} | 百分比格式,保留α位小數 |
{:.αe} | 指數格式,保留α位小數 |
{:b} | 二進位 |
{:d} | 十進位 |
{:o} | 八進位 |
{:x} | 十六進位 |
符號 | 說明 |
---|---|
{:.αf} | 保留小數點後α位 |
{:+.αf} | 帶符號保留小數點後α位 |
{:β>αd} | 數字左邊補β至長度為α |
{:β<αd} | 數字右邊補β至長度為α |
{:>αd} | 右對齊,長度為α |
{:<αd} | 左對齊,長度為α |
{:^αd} | 中對齊,長度為α |
PYTHON
ASCII碼
PYTHON
Python錯誤種類
PYTHON
ArithmeticError 所有數值計算錯誤的基類
AssertionError 斷言語句失敗
AttributeError 對像沒有這個屬性
BaseException 所有異常的基類
DeprecationWarning 關於被棄用的特徵的警告
EOFError 沒有內建輸入,到達EOF 標記
EnvironmentError 操作系統錯誤的基類
Exception 常規錯誤的基類
FloatingPointError 浮點計算錯誤
FutureWarning 關於構造將來語義會有改變的警告
GeneratorExit 生成器(generator)發生異常來通知退出
IOError 輸入/輸出操作失敗
ImportError 導入模塊/對象失敗
IndentationError 縮進錯誤
IndexError 序列中沒有此索引(index)
KeyError 映射中沒有這個鍵
KeyboardInterrupt 用戶中斷執行(通常是輸入^C)
LookupError 無效數據查詢的基類
MemoryError 內存溢出錯誤(對於Python 解釋器不是致命的)
NameError 未聲明/初始化對象 (沒有屬性)
NotImplementedError 尚未實現的方法
OSError 操作系統錯誤
OverflowError 數值運算超出最大限制
OverflowWarning 舊的關於自動提升為長整型(long)的警告
PendingDeprecationWarning 關於特性將會被廢棄的警告
ReferenceError 弱引用(Weak reference)試圖訪問已經垃圾回收了的對象
RuntimeError 一般的運行時錯誤
RuntimeWarning 可疑的運行時行為(runtime behavior)的警告
StandardError 所有的內建標準異常的基類
StopIteration 迭代器沒有更多的值
SyntaxError Python 語法錯誤
SyntaxWarning 可疑的語法的警告
SystemError 一般的解釋器系統錯誤
SystemExit 解釋器請求退出
TabError Tab 和空格混用
TypeError 對類型無效的操作
UnboundLocalError 訪問未初始化的本地變量
UnicodeDecodeError Unicode 解碼時的錯誤
UnicodeEncodeError Unicode 編碼時錯誤
UnicodeError Unicode 相關的錯誤
UnicodeTranslateError Unicode 轉換時錯誤
UserWarning 用戶代碼生成的警告
ValueError 傳入無效的參數
Warning 警告的基類
WindowsError 系統調用失敗
ZeroDivisionError 除(或取模)零 (所有數據類型)
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
https://www.runoob.com/python3/python3-tutorial.html
http://kevin.hwai.edu.tw/~kevin/material/JAVA/Sample2016/ASCII.htm
https://medium.com/@Kadai/conditional-operator-in-python-a4a041172bab
https://www.learncodewithmike.com/
https://drive.google.com/file/d/1-zowdUSivxy5o3_iuo3IFHFPSzn1-cBW/view
http://kaiching.org/pydoing/py/python-library-re.html
https://zh.wikipedia.org/wiki/%E6%9E%84%E9%80%A0%E5%99%A8#Python