# 高一下 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()
```

## 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
```

## 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

202302

## 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年台積電統計圖') #繪製統計圖
```
