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
PYTHON
Made with Slides.com