# 高一下 Python多元選修作品集 ## 1. 輸入二維串列的列與行的個數,以亂數產生串列的每個元素(1到99之間整數值)。 ```python= row=int(input("輸入列數:")) line=int(input("輸入行數:")) list = [[random.randint(1,99) for j in range(line)] for i in range(row)] for i in range(row): for j in range(line): print(f"{list[i][j]:>2}", end=" ") print() ``` ![](https://hackmd.io/_uploads/SJ2DANhU2.png) ## 2. 終極密碼 ```python= import random as rd #匯入random套件 ansc = rd.randint(1,100) max = 100 min = 1 i = 1 while(ansu != ansc): ansu = int(input(f"目前範圍 {min} ~ {max} ,請猜:")) if ansc < ansu: max = ansu-1 elif ansc > ansu: min = ansu+1 else: print(f"恭喜,你猜對了!總共猜了{i}次") i = i+1 ``` ![](https://hackmd.io/_uploads/Sy5j1H28n.png) ## 3. 從網路抓取台積電2023年1月、2月股價資料,存到google試算表(名稱為'台積電股票資料'),1月份股價存到工作表'202301',2月份股價存到工作表'202302' ```python= # 認證 # 載入使用者認證模組 from google.colab import auth auth.authenticate_user() # 取得使用者金鑰 import gspread from google.auth import default creds, _ = default() # 設定認證 gc = gspread.authorize(creds) # 從網路讀取資料 import pandas as pd url = 'https://www.twse.com.tw/exchangeReport/STOCK_DAY?response=html&date=20230101&stockNo=2330' df1 = pd.read_html(url, header=1)[0] url = 'https://www.twse.com.tw/exchangeReport/STOCK_DAY?response=html&date=20230201&stockNo=2330' df2 = pd.read_html(url, header=1)[0] # 設定試算表名稱 sheetname = '台積電股票資料' # 新增試算表 sh = gc.create(sheetname) # 新增工作表 sh.add_worksheet(title='202301', rows=50, cols=20) sh.add_worksheet(title='202302', rows=50, cols=20) wk1 = sh.worksheet("202301") wk2 = sh.worksheet("202302") # 在工作表第0列寫入欄位名稱(因df1.values沒有欄位名稱) col_name = df1.columns.tolist() wk1.append_row(col_name) wk2.append_row(col_name) # 新增資料 wk1.append_rows(df1.values.tolist()) wk2.append_rows(df2.values.tolist()) # 刪除原有工作表1(若在建立試算表就執行刪除工作表1,有可能尚未建立就要刪除,會出錯。所以放在程式最後面再刪除) sh.del_worksheet(sh.worksheet("工作表1")) ``` 202301 ![](https://hackmd.io/_uploads/SJ32eHnIn.png) 202302 ![](https://hackmd.io/_uploads/S1gjalSnUh.png) ## 4. 2022全年個股統計圖 ```python= # 需先下載台北黑體字型 !wget -O taipei_sans_tc_beta.ttf https://drive.google.com/uc?id=1eGAsTN1HBpJAkeVM57_C7ccp7hbgSz3_&export=download def twodigit(n): #將數值轉為二位數字串 if(n < 10): retstr = '0' + str(n) else: retstr = str(n) return retstr def convertDate(date): #轉換民國日期(如111/03/31)為西元日期(如20220331) str1 = str(date) yearstr = str1[:3] #取出民國年 realyear = str(int(yearstr) + 1911) #轉為西元年 realdate = realyear + str1[4:6] + str1[7:9] #組合日期 return realdate import pandas as pd import os import time import matplotlib matplotlib.font_manager.fontManager.addfont('taipei_sans_tc_beta.ttf') matplotlib.rc('font', family='Taipei Sans TC Beta') filepath = 'stockyear2022.csv' if not os.path.isfile(filepath): #如果檔案不存在就建立檔案 dfall = pd.DataFrame() # 新增空的DataFrame for i in range(1, 13): #取1到12數字 url = f'https://www.twse.com.tw/exchangeReport/STOCK_DAY?response=html&date=2022{twodigit(i)}01&stockNo=2330' #組合網址 dftemp = pd.read_html(url, header=1)[0] dfall = pd.concat([dfall, dftemp], ignore_index=True) time.sleep(0.12) dfall.to_csv(filepath, encoding='utf-8', index=False) #dfall已有索引欄位,故存成csv檔不需有索引欄位 df = pd.read_csv(filepath, encoding='utf-8') #以pandas讀取檔案 for i in range(len(df['日期'])): #轉換日期式為西元年格式 df['日期'][i] = convertDate(df['日期'][i]) df['日期'] = pd.to_datetime(df['日期']) #轉換日期欄位為日期格式 df.plot(kind='line', figsize=(12, 6), x='日期', y=['收盤價', '最低價', '最高價'],title ='2022年台積電統計圖') #繪製統計圖 ``` ![](https://hackmd.io/_uploads/B1D3bB283.png)