# Module 2022 資訊之芽 北區py班 yjrubixcube --- ## What - `xxx.py` `zzz.pyc` - 一些別人寫好的library. eg: `math`, `random` ---- ## Why - 把別人寫好的功能拿來用 - 常用的東西不用每次重寫 - 讓你的每個檔案不會太長 - 大一點的project可能會分很多檔案 - 總而言之就是偷懶 ---- ## How 1. 基本款 ```python= import math print(math.gcd(18, 30)) # 6 ``` ---- 2. 取個暱稱 ```python= import numpy as np x = [[],[],[]] print(np.shape(x)) # (3, 0) ``` ---- ### 常用的暱稱 ```python= import numpy as np import matplotlib.pyplot as plt import pillow as pil import requests as req import bs4.BeautifulSoup as bs ``` ---- 3. 只import一部份 ```python= from random import randint, shuffle print(randint(0, 100)) # 包含端點 l = list(range(10)) print(l) shuffle(l) print(l) print(uniform(1, 10)) # NameError ``` from可以import的東西: 變數, class, 函數 ---- 4. ![](https://i.imgur.com/b5nvVmh.jpg) ```python= from math import * ``` 盡量不要這樣做 ---- ```python= import NeverGonnaGiveYouUp # ModuleNotFoundError ``` ![](https://i.imgur.com/z84kG38.jpg) ---- ## 所以現在是練習時間( :email: judge) 輸入三角形的三個邊長,算出每個邊對面的角度 神奇公式: $\angle A =\arccos (\frac{b^2+c^2-a^2}{2bc})$ 可能會需要: `math` `acos` `pow` `pi` 冷知識1: `acos` 算出來的結果是弧度 冷知識2: 角度$=\frac{180}{\pi}*$弧度 [求救](https://www.google.com/) ---- ## :rice:解 ```python= from math import acos, pi a, b, c = map(int, input().split()) print(acos((b**2+c**2-a**2)/(2*b*c))/pi*180) print(acos((c**2+a**2-b**2)/(2*a*c))/pi*180) print(acos((b**2+a**2-c**2)/(2*b*a))/pi*180) ``` --- ## 自己寫一個module ---- 建立一個 `factorial.py` ```python= def fact(n): if n == 0: return 1 return n*fact(n-1) ``` ---- 再另一個檔案或jupyter notebook裡面打 ```python= from factorial import fact print(fact(10)) ``` ---- ## 所以現在又是練習時間 寫一個module,裡面有一個`fib()` 函數。 呼叫`fib(n)` 會回傳第`n`個費波納契數 `fib(0) = 0, fib(1) = 1` ---- :rice: 解 ```python= def fib(n): if n == 0: return 0 if n == 1: return 1 return fib(n-1) + fib(n-2) ``` ---- 大作業的架構 ![](https://i.imgur.com/hVwxTi7.png) 如果檔案被分散在不同資料夾裡面呢 ---- ``` project ├── Controller |   └── controller.py ├── Model |   ├── items.py | └── player.py └── main.py ``` 在 `main.py` ```python= from .Controller import controller from .Model.items import item_names ``` 在 `controller.py` ```python= from ..Model.items import item_names ``` `.`: 檔案的資料夾開始 `..`: 檔案的上一層資料夾開始 --- # 常用的module介紹 ---- - **math** - **sys** - **random** - **os** - **time** - **datetime** - pygame - numpy - matplotlib - pickle - pandas [這些幹嘛用的](https://google.com) ---- ## math ```python= import math print(math.gcd(15, 20)) # 5 print(math.ceil(math.pi)) # 4 print(math.floor(math.pi)) # 3 print(math.pow(2, 10)) # 1024 print(math.sqrt(87)) # 9.327379053088816 print(math.log(10)) # 2.302585092994046 這裡是以e為底 print(math.log2(8)) # 3 以2為底 print(math.exp(3)) # 20.085536923187668 e的3次方 ``` ---- ## math continued ```python= print(math.pi) # 3.141592653589793 print(math.e) # 2.718281828459045 ``` ---- ## random ```python= import random print(random.random()) # [0, 1) print(random.randint(1, 10)) # 包含端點 ``` ---- ## random continued ```python= l = list(range(10)) print(random.choice(l)) print(l) random.shuffle(l) print(l) ``` ---- ## string ```python= import string print(string.ascii_lowercase) print(string.ascii_uppercase) print(string.digits) print(string.punctuation) print(string.printable) ``` ---- ## sys ![](https://i.imgur.com/9Uwo0NX.png) ```python= import sys print(sys.platform) # 操作系統平台名稱 print(sys.version) # python的版本 print(sys.argv) # command line的參數 ``` ---- ## os ```python= import os print(os.getcwd()) print(os.listdir("/")) print(os.path.join("documents", "folder")) # documents/folder ``` ---- ## time :zzz: ```python= import time print(time.time()) time.sleep(2) print(time.time()) ``` ---- ## datetime ```python= import datetime print(datetime.datetime.now()) # YYYY-mm-dd HH:MM:SS.ffffff print(datetime.date.today()) # YYYY-mm-dd delta = datetime.timedelta(weeks = 2) print(datetime.date.today()+delta) print(datetime.datetime.now().strftime("Year: %Y, micro: %f")) ``` ---- ## 所以現在還是練習時間 第一行輸入整數 N 代表字串長度 第二行包含4個整數,每個整數必為0或1(1代表是0代表否) 第0個數代表是否包含大寫字母 第1個數代表是否包含小寫字母 第2個數代表是否包含數字 第3個數代表是否包含標點符號 請輸出長度為N的隨機字串 --- ## 延伸閱讀 ![](https://i.imgur.com/tJ147Lq.jpg) [python的docs](https://docs.python.org/3/library/) [strftime的格式](https://docs.python.org/3/library/datetime.html#strftime-and-strptime-behavior) [萬用的方法](https://google.com) --- ## 參考資料 [2022竹區py班簡報](https://hackmd.io/@Sean64/py-module#/) [2021北區py班簡報](https://drive.google.com/file/d/1rBZs-HSJ0-Km_3Zoi4NHlVne_56o3rIE/view)
{"metaMigratedAt":"2023-06-16T21:14:33.301Z","metaMigratedFrom":"YAML","title":"Module","breaks":true,"contributors":"[{\"id\":\"54bbdba3-ffbf-423a-b026-751cb8a77149\",\"add\":5555,\"del\":1049}]"}
    492 views