How can we help you today?
【研習】MPY x LLM
研習調查暨意見回饋:
研習資料下載:
綜合練習一、輸入出、函數、迴圈
import math
# 函數定義
def calculate_circumference(radius):
"""計算圓周長"""
return 2 * math.pi * radius
def calculate_area(radius):
"""計算圓面積"""
return math.pi * (radius ** 2)
# 主程式
while True:
# 接收使用者輸入
choice = input("請選擇計算項目(1: 圓周長, 2: 圓面積, q: 離開程式):")
if choice == 'q':
print("程式結束")
break
elif choice not in ['1', '2']:
print("無效選項,請重新輸入")
continue
# 輸入半徑
try:
radius = float(input("請輸入圓的半徑:"))
except ValueError:
print("請輸入有效的數值!")
continue
# 執行對應的計算
if choice == '1':
circumference = calculate_circumference(radius)
print(f"圓周長為:{circumference:.2f}")
elif choice == '2':
area = calculate_area(radius)
print(f"圓面積為:{area:.2f}")
綜合練習二、值日生排班表
import random
# 建立座號名單
seat_numbers = list(range(1, 21))
# 排除座號函式
def exclude_seat(seat_list):
"""從座號名單中排除特定座號"""
try:
exclude_number = int(input("請輸入要排除的座號 (1-20),或直接按 Enter 繼續:"))
if exclude_number in seat_list:
seat_list.remove(exclude_number)
print(f"座號 {exclude_number} 已排除。")
else:
print("該座號不在範圍內或已排除。")
except ValueError:
print("無排除座號。")
return seat_list
# 配對函式
def create_pairs(seat_list):
"""隨機生成兩兩一對的配對"""
random.shuffle(seat_list)
pairs = []
for i in range(0, len(seat_list) - 1, 2):
pairs.append((seat_list[i], seat_list[i + 1]))
# 若有單一剩餘座號,顯示無法配對
if len(seat_list) % 2 != 0:
print(f"剩餘座號無法配對:{seat_list[-1]}")
return pairs
# 主程式
while True:
print("\n座號名單:", seat_numbers)
# 選擇是否排除座號
seat_numbers = exclude_seat(seat_numbers)
# 建立配對
pairs = create_pairs(seat_numbers)
print("\n隨機配對結果:")
for pair in pairs:
print(f"座號 {pair[0]} 與 座號 {pair[1]} 配對")
# 詢問是否再次執行
repeat = input("\n是否再次執行配對?(y/n):")
if repeat.lower() != 'y':
print("程式結束")
break
綜合練習三、累進電費計算
def calculate_electricity_bill(month, usage):
"""
根據輸入的月份和用電度數,計算電費。
month: int - 輸入的月份 (1 到 12)
usage: float - 輸入的用電度數
"""
# 判斷是否為夏季
if month in [6, 7, 8, 9]:
# 夏季電價
tier1_rate = 1.68 # 120度以下
tier2_rate = 2.45 # 121度到330度
tier3_rate = 3.70 # 331度到500度
tier4_rate = 5.04 # 501度到700度
else:
# 非夏季電價
tier1_rate = 1.68 # 120度以下
tier2_rate = 2.16 # 121度到330度
tier3_rate = 3.03 # 331度到500度
tier4_rate = 4.14 # 501度到700度
# 電費計算
if usage <= 120:
cost = usage * tier1_rate
elif usage <= 330:
cost = (120 * tier1_rate) + ((usage - 120) * tier2_rate)
elif usage <= 500:
cost = (120 * tier1_rate) + (210 * tier2_rate) + ((usage - 330) * tier3_rate)
elif usage <= 700:
cost = (120 * tier1_rate) + (210 * tier2_rate) + (170 * tier3_rate) + ((usage - 500) * tier4_rate)
else:
# 超過700度,使用最高費率
tier5_rate = 6.41 # 701度以上
cost = (120 * tier1_rate) + (210 * tier2_rate) + (170 * tier3_rate) + (200 * tier4_rate) + ((usage - 700) * tier5_rate)
return cost
# 主程式
try:
month = int(input("請輸入月份 (1-12):"))
usage = float(input("請輸入用電度數:"))
bill = calculate_electricity_bill(month, usage)
print(f"本月的電費為:{bill:.2f} 元")
except ValueError:
print("輸入的數值無效,請輸入有效的月份和用電度數!")
綜合練習四、請LLM產生計算資料,匯出csv檔
import pandas as pd
import random
from google.colab import files
# Step 1: 隨機生成 10 個學生的姓名
first_names = ["小明", "小華", "小美", "小強", "小玲", "小麗", "小天", "小英", "小亮", "小莉"]
last_names = ["陳", "林", "李", "王", "吳", "張", "劉", "楊", "黃", "趙"]
students = [random.choice(last_names) + random.choice(first_names) for _ in range(10)]
# Step 2: 隨機生成各科目分數
scores = {
"姓名": students,
"數學": [random.randint(50, 100) for _ in range(10)],
"英文": [random.randint(50, 100) for _ in range(10)],
"國文": [random.randint(50, 100) for _ in range(10)],
"自然": [random.randint(50, 100) for _ in range(10)]
}
# Step 3: 將資料儲存到 DataFrame
df = pd.DataFrame(scores)
# Step 4: 將 DataFrame 儲存為 CSV 檔案
file_name = "student_scores.csv"
df.to_csv(file_name, index=False, encoding='utf-8-sig')
# Step 5: 提供下載 CSV 檔案
files.download(file_name)
綜合練習六、計算個人平均分數,再寫入Excel之中
# Step 1: 安裝所需的套件
!pip install openpyxl
# Step 2: 匯入相關的庫
import pandas as pd
from google.colab import files
# Step 3: 上傳 Excel 檔案到 Colab
uploaded = files.upload()
# 假設檔案名是 "student_scores.xlsx"(根據實際檔案名進行修改)
file_name = "practice.xlsx"
# Step 4: 讀取 Excel 文件
df = pd.read_excel(file_name)
# Step 5: 計算每位學生的平均分數,並將結果寫入 "平均分數" 欄位
df['平均分數'] = df[['數學', '英文', '國文', '自然']].mean(axis=1)
# Step 6: 將更新後的資料寫回 Excel 檔案
output_file_name = "student_scores_with_avg.xlsx"
df.to_excel(output_file_name, index=False)
# Step 7: 提供下載更新後的 Excel 檔案
files.download(output_file_name)
綜合練習七、爬蟲:爬取台灣銀行牌告匯率並轉存csv檔
# 如未安裝 BeautifulSoup4, 請執行以下指令
# !pip install beautifulsoup4 requests
import requests
from bs4 import BeautifulSoup
import pandas as pd
# 定義台灣銀行牌告匯率的網址
url = "https://rate.bot.com.tw/xrt?Lang=zh-TW"
# 發送 GET 請求
response = requests.get(url)
response.encoding = 'utf-8' # 確保正確的中文編碼
# 檢查請求是否成功
if response.status_code == 200:
# 使用 BeautifulSoup 解析 HTML
soup = BeautifulSoup(response.text, "html.parser")
# 找到表格
table = soup.find("table", {"title": "牌告匯率"})
# 初始化空的列表來存放匯率資料
currency_data = []
# 遍歷表格的每一行,跳過標題行
for row in table.tbody.find_all("tr"):
# 取得幣別名稱
currency_name = row.find("div", {"class": "visible-phone"}).get_text(strip=True)
# 取得匯率買入和賣出價
rates = row.find_all("td", {"data-table": "本行現金賣出"})
cash_buying_rate = row.find_all("td")[1].get_text(strip=True)
cash_selling_rate = row.find_all("td")[2].get_text(strip=True)
spot_buying_rate = row.find_all("td")[3].get_text(strip=True)
spot_selling_rate = row.find_all("td")[4].get_text(strip=True)
# 將資料加入到列表
currency_data.append([currency_name, cash_buying_rate, cash_selling_rate, spot_buying_rate, spot_selling_rate])
# 使用 pandas 將資料轉換成 DataFrame
columns = ["幣別", "現金買入", "現金賣出", "即期買入", "即期賣出"]
df = pd.DataFrame(currency_data, columns=columns)
# 顯示結果
print("台灣銀行牌告匯率")
print(df)
else:
print("無法連接到台灣銀行網站,請檢查網址或網路連線")