筆記 - Python 基礎

[筆記] Python 基礎

語言特性與熱門應用

  • Python 是泛用的程式語言,強調易學好懂
  • 最近常用在數據分析、人工智慧

安裝

下載地址 : Python

  • 勾起來,之後操作方便許多

資料與運算

1. 變數與資料型態

  • 數字 : 3.5
  • 字串 : "hello"
  • 布林值 : TrueFalse ( python 的 T 跟 F 為大寫 )
  • 可變列表 ( List ) : [3,4,5]["hello","world"]
  • 固定列表 ( Tuple ) : (3,4,5)("hello","world")
  • 集合 : {3,4,5}{"hello","world"}
  • 字典 : {"apple":"蘋果","data":"資料"}
  • 變數 : data=3 data 為變數,不用宣告

2. 運算

  1. 數字

    • 7//6 : 整數除法
    • 2**3 : 2 的 3 次方
  2. 字串

    • "hell\"o 輸出為 hell"o : 想在字串中加入雙引好可以用 \ 跳脫
    • """hello""" or '''hello''' : 在裡面的換行會直接呈現
    • 字串會對內部的字元編號 ( 索引 ),從 0 開始算起,假設 s = "hello"

      • s[0] 輸出為 h
      • s[1:4] 輸出為 ell : 輸出字串中編號 1 到 4 ( 不包含 )
      • s[1:] 輸出為 ello
      • s[:4] 輸出為 hell
  3. 有序列表 ( List、Tuple )

    • List,假設 grades = [12,60,15,70,90]

      • grades[1:4] = [] 輸出為 [12,90] : 連續刪除列表中編號 1 到 4 ( 不包含 )
      • grades = grades + [12,33] 輸出為 [12,60,15,70,90,12,33]
    • Tuple : 除了更動會出錯,其他都跟 List 一樣

  4. 集合與字典

    • 集合,假設 s1 = {3,4,5} s2 = {4,5,6,7}

      • 10 in s1 輸出為 False10 not in s1 輸出為 True
      • & : 交集,| : 聯集,- : 差集,^ : 反交集
      • s = set("hello") s 輸出為 {'l','h','e','o'} : 把字串拆解為集合
    • 字典,假設 dic = {"apple":"蘋果","bug":"蟲蟲"}

      • test in dic 輸出為 Falsetest not in dic 輸出為 True
      • del dic["apple"] : 刪除字典中的鍵值對
      • dic = {x:x*2 for x in [3,4,5]} dic 輸出為 {3:6,4:8,5:10} : 從列表資料產生字典

流程控制

  • 在 python {} 用縮排 ( tab ) 取代

1. 判斷式

1
2
3
4
5
6
if True:
print("True 執行")
elif False:
print("False 執行")
else:
print("跑不到")

python 目前不支援 switch

2. 迴圈

  1. while
1
2
3
4
n = 1
while n<10:
printf(n)
n+=1
  1. for

    • 迴圈跑列表

      1
      2
      for x in [3, 5, 1]:
      print(x)
    • 迴圈跑字串

      1
      2
      for x in "hello":
      print(x)
    • 迴圈跑range

      1
      2
      for x in range(5):
      print(x)

      range(5) : 0,1,2,3,4
      range(3,7) : 3,4,5,6

迴圈最後可加 else:,else 在迴圈結束前執行,被 break 強制結束就不會執行 else

函式、模組與封包

函式 : 用來做程式的包裝,同樣邏輯可以重複利用

1
2
3
4
5
6
7
def add(n1 = 1,n2 = 2):
result = n1 + n2
return result

print(add(3, 4)) #7
print(add()) #3
print(add(n2 = 3,n1 = 4))
1
2
3
4
5
6
7
8
def avg(*ns): #無限不定參數資料
sum = 0
for n in ns:
sum += n
print(sum/len(ns))

avg(3, 4) #3.5
avg(3, 5, 10) #6.0

模組 : 將程式寫在一個檔案中,此檔案可重複載入使用

  1. 載入
1
import sys as system #載入模組並取別名 system
  1. 使用
1
2
3
print(system.platform)
print(system.maxsize)
print(system.path) #印出模組的搜尋路徑
  1. 內建模組與自訂模組
  • 主程式
1
2
3
4
import sys #內建的模組
sys.path.append("modules") #在模組的搜尋路徑列表中新增路徑,這裡 "modules" 為資料夾
import geometry #自訂的模組,放在 "modules" 資料夾內
print(geometry.distance(1, 1, 5, 5))
  • 模組 : 放在 modules 資料夾內
1
2
3
4
def distance(x1, y1, x2, y2):
return ((x2 - x1)**2 + (y2 - y1)**2)**0.5
def slope(x1, y1, x2, y2):
return (y2 - y1)/(x2 - x1)

封包 : 用來整理、分類模組

  • 檔案中的資料夾為封包,檔案為模組
  1. 建立封包

    檔案配置 :

    • 專案資料夾

      • 主程式.py
      • 封包資料夾

        • __init__.py : 必要
        • 模組一.py
        • 模組二.py
  2. 使用封包

1
import 封包名稱.模組名稱 as 模組別名

類別與實體物件

  • 封裝的變數或函式,統稱類別的屬性

類別

  1. 定義類別

    1
    2
    3
    class 類別名稱:
    定義封裝的變數
    定義封裝的函式
  2. 使用類別

1
類別名稱.屬性名稱

實體物件

  1. 建立實體物件
1
2
3
4
5
class 類別名稱:
def __init__(self): #定義初始化函式
透過操作 self 來定義實體屬性
# 建立實體物件,放入變數 obj 中
obj = 類別名稱() #呼叫初始化函式
1
2
3
4
5
6
class Point:
def __init__(self, x, y):
self.x = x
self.y = y

p = Point(1,5)
  1. 使用實體物件
1
2
3
#實體物件.實體屬性名稱
p = Point(1,5)
print(p.x + p.y)

實體方法

  1. 建立實體方法
  • 封裝在實體物件中的函式
1
2
3
4
5
6
7
class 類別名稱:
def __init__(self): #定義初始化函式
封裝在實體物件中的變數
def 方法名稱(self,更多自訂參數):
方法主體,透過 self 操作實體物件
# 建立實體物件,放入變數 obj 中
obj = 類別名稱() #呼叫初始化函式
1
2
3
4
5
6
7
class Point:
def __init__(self, x, y):
self.x = x
self.y = y
def show(self):
print(self.x, self.y)
p = Point(1,5)
  1. 使用實體方法
1
2
3
#實體物件.實體方法名稱(參數資料)
p = Point(1,5) #建立實體物件
p.show() #呼叫實體方法

文字檔案的讀取與儲存

1. 開啟檔案

1
檔案物件 = open(檔案路徑, mode = 開啟模式, encoding = 編碼)
  • 開啟模式

    • "r" : 讀取模式
    • "w" : 寫入模式
    • "r+" : 讀寫模式
  • 編碼

    • "utf-8" : 中文常用編碼

2. 讀取檔案

  • 讀取全部文字
1
檔案物件.read()
  • 一次讀取一行
1
2
for 變數 in 檔案物件:
從檔案依序讀取每行文字到變數中
  • 讀取 JSON 格式
1
2
import json
讀取到的資料 = json.load(檔案物件)

3. 儲存檔案

  • 寫入文字
1
檔案物件.write("字串\n") #要換行就 \n
  • 寫入 JSON 格式
1
2
import json
json.dump(要寫入的資料, 檔案物件)

4. 關閉檔案

1
檔案物件.close()

最佳實務

1
2
3
with open(檔案路徑, mode = 開啟模式) as 檔案物件:
讀取或寫入檔案的程式
#以上區塊會自動、安全的關閉檔案,不需 close

亂數與統計模組

random

  1. 載入模組
1
import random
  1. 使用 random
1
2
3
4
5
6
random.choice([0, 1, 5, 8]) #從列表中隨機選取 1 個資料
random.sample([0, 1, 5, 8], n) #從列表中隨機選取 n 個資料
random.shuffle([0, 1, 5, 8]) #將列表的資料就地隨機調換順序
random.random() # 0 ~1 之間的隨機數亂數
random.uniform(n, m) # 取得 n ~ m 之間的隨機亂數
random.normalvariate(n, m) # 取得平均數 n,標準差 m 的常態分配亂數

常態分配範例 :

statistics

  1. 載入模組
1
import statistics
  1. 使用 statistics
1
2
3
statistics.mean([1, 4, 6, 9]) #計算列表中數字的平均數
statistics.median([1, 4, 6, 9]) #計算列表中數字的中位數
statistics.stdev([1, 4, 6, 9]) #計算列表中數字的標準差

網路連線與公開資料串接

網路連線

  1. 載入模組
1
import urllib.request as request
  1. 下載特定網址資料
1
2
3
with request.urlopen(網址) as response:
data = response.read().decode("utf-8")
print(data)

公開資料串接

  1. 確認資料格式

    • JSON、CSV、或其他格式
  2. 解讀格式

    • 解讀 JSON 使用內建的 JSON 模組
tags: 筆記 程式語言 Python
Author: Kenny Li
Link: https://kennyliblog.nctu.me/2019/06/23/Python-basic/
Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.