'''1.
創造電子錢包的Class 並涵蓋下方範例功能
w1 = Wallet("Alice", 500)
w2 = Wallet("Bob", 300)
[Link](200)
[Link](100)
[Link](w2, 250)
# 加入餘額不足的情境
[Link](1000)
[Link](w2, 1000)
'''
class Wallet:
def __init__(self, owner, balance):
[Link]=owner
[Link]=balance
def deposit(self, amount):
[Link] += amount
print(f'{[Link]}存入 {amount}元,目前餘額:{[Link]}元')
def withdraw(self, amount):
if [Link]>amount:
[Link]-=amount
print(f'{[Link]}提領 {amount}元,目前餘額:{[Link]}元
')
elif [Link]<amount:
print(f'{[Link]}餘額不足')
def tranfer(self, other_wallet, amount):
if [Link]>amount:
[Link]-=amount
other_wallet.balance+=amount
print(f'{[Link]}轉給{other_wallet.owner} {amount}元,目前
餘額:{[Link]}元')
elif [Link]<amount:
print(f'{[Link]}餘額不足,轉帳失敗')
w1 = Wallet("Alice", 500)
w2 = Wallet("Bob", 300)
[Link](200)
[Link](100)
[Link](w2, 250)
# 加入餘額不足的情境
[Link](1000)
[Link](w2, 1000)
'''3. 電影票價計算(條件 + 函式)
基本票價是260元,最終輸出取整數!!! 規則項目是上到下有順序性!!!
規則項目 條件 價格調整
1. 年齡優惠 未滿 12 歲 五折
65 歲(含)以上 六折
2. 學生優惠 是學生 九折,可與年齡優惠疊加
3. 週末加價 星期六或星期日 加價 30 元
4. 早場優惠 開演時間 < 12(中午前) 再打 85 折
5. 3D 電影 是 3D 電影 加價 50 元
def ticket_price(age: int, is_student: bool, day: str, start_hour: int,
is_3d: bool) -> int:
"""
根據輸入參數計算電影票價。
參數說明:
age : 觀眾年齡(整數)
is_student : 是否為學生(布林值,True 或 False)
day : 星期縮寫字串('Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat',
'Sun')
start_hour : 開演時間(整數小時,24 小時制)
is_3d : 是否為 3D 電影(布林值,True 或 False)
回傳:
最終票價(整數)
'''
def ticket_prices(age: int, is_student: bool, day: str, start_hour:
int, is_3d: bool):
ticket_price=260
if age<12:
ticket_price*0.5
elif age>65:
ticket_price*0.6
if is_student==True:
ticket_price*0.9
if day=='Sat':
ticket_price+=30
elif day=='Sun':
ticket_price+=30
if start_hour<12:
ticket_price*0.85
if is_3d==True:
ticket_price+=50
return ticket_price
uu=ticket_prices(13, False, 'Mon', 14, False)
print(uu)
'''2. 學號修正功能(字串操作 + 數值運算 + 函式)
輸入: 妳們各自學號(ex: “114408512”)
禁止直接使用任何常數字面值:不可直接寫出 0, 1, 9, "0123456789", "0" 等。
只允許使用學號中的數字作為運算來源:例如可以取 sid[2]、int(sid[-1]) 等。
結果必須為固定字串 "0123456789"!!!
*本題不著重特定公式,而是觀察學生如何運用字串與數值邏輯。
*只要達成輸出正確且未違反限制,均視為合格 (每人答案基本不可能相同)
'''
number='114408512'
a=int(number[4])
b=int(number[0])
c=int(number[8])
d=int(number[8])+1
e=int(number[2])
f=int(number[6])
g=int(number[6])+1
h=int(number[6])+2
i=int(number[5])
j=int(number[5])+1
print(f'{a}{b}{c}{d}{e}{f}{g}{h}{i}{j}')
'''1. 遞迴計算數字總和
請撰寫一個遞迴函式 digit_sum(n),用來計算一個整數 n 的「所有數字總和」。
不得使用 while 或 for 迴圈,必須使用 遞迴(recursion) 的方式完成。
'''
def digit_sum(n):
if n<10:
return n
else:
return n % 10 + digit_sum(n //10)
'取得最後一位數(1234 % 10 → 4),去掉最後一位數(1234 // 10 → 123)'
print(digit_sum(9876))
print(digit_sum(9))
print(digit_sum(508))
'''第1份程式請命名 HW3_113423032(學號改自己的) 從文字檔中讀取資料。
(文字檔必須超過100字,請自行準備一個,可以上網抓,每個人的文字檔必須不同,文字檔請也
更改名稱,例如:HW3_ 113423032)
將內容轉換為字典(dictionary)。 將結果以 JSON 格式儲存為 [Link] 檔案。'''
import json
with open('sample_text.txt', 'r', encoding='utf-8') as file:
text=[Link]()
key=['學習', '考試', '努力']
data_dic={}
for words in key:
data_dic[words]=''
text_split=[Link]('\n')
for i in text_split:
for words in key:
if data_dic[words]:
data_dic[words]+='\n'+i
else:
data_dic[words]+=i
with open('[Link]', 'w', encoding='utf-8') as file:
[Link](data_dic, file, ensure_ascii=False, indent=4)
'''Choosing Between Classes, Modules, and Other Data Structures in
Python
● 投資組合類別
○ 輸入資產(資產名稱, 金額):(現金, 2000000)
■ def add_asset(self, asset):
○ 輸入要購買的資產(資產名稱, 金額):(債券, 43500000)
■ 需檢查資產是否足夠
○ 輸出現在財產分配比重
■ def amount(self):
○ 輸出總資產現況
■ def display_portfolio(self):
○ 輸入今年預期年化報酬並輸出可能性漲幅(20% , 30% ,......)
■ def expected_return(self):
jacky = account()
jacky.add_asset(gold, 50000)
jacky.add_asset(stock, 10000000)
jacky.display_portfolio()
peter = account()
peter.add_asset(stock, 10000000)'''
class account:
def __init__(self):
# 使用字典儲存資產
[Link] = {}
def add_asset(self, asset, amount):
# 若不是現金,需檢查現金是否足夠
if asset != "cash":
if [Link]("cash", 0) < amount:
print("現金不足,無法購買", asset)
return
[Link]["cash"] -= amount
# 新增或累加資產
[Link][asset] = [Link](asset, 0) + amount
def amount(self):
total = sum([Link]())
print("資產配置比例:")
for asset, value in [Link]():
ratio = value / total * 100
print(f"{asset}: {ratio:.2f}%")
def display_portfolio(self):
total = sum([Link]())
print("目前資產狀況:")
for asset, value in [Link]():
print(f"{asset}: {value}")
print("總資產:", total)
def expected_return(self, rates):
total = sum([Link]())
print("預期報酬情境:")
for r in rates:
future = total * (1 + r)
print(f"報酬率 {int(r*100)}%:{future:.0f}")
'''((Pandas)從網路下載資料
● 基本統計與觀察
○ 找出異常(< >)'''
'''pip install pandas'''
import pandas as pd
data=pd.read_csv('[Link]')
df=[Link](data) #轉成 DataFrame
moist=[Link][:, '濕度(%)']
# loc[列, 欄]、: 代表「所有列」、回傳的是 Series
moist_u=moist[df['濕度(%)']>=70]
print(moist_u)
rain=[Link][:, 3]
#iloc:用位置索引、: → 所有列、3 → 第 4 欄(index 從 0 開始)
rain_u=rain[df['降雨機率(%)']>=50]
print(rain_u)
high=[Link][:, '最高溫']
high_u=[high[df['最高溫']>=29]]
print(high_u)
print([Link](include='all'))
#同時分析文字與數值
'''○ 統計、篩選 作業六:#用class、import進__main__ '''
# student_.py
#__main__
'''已知某學生的成績如下:
請寫一段程式碼:找出所有 不及格科目(<60)
計算所有科目的平均成績'''
scores = {
"Math": 85,
"English": 92,
"History": 58,
"Science": 55
}
fail=[]
for subject, score in [Link]():
#要加.item()
if score<60:
[Link](subject)
avg=sum([Link]())/len(scores)
print(fail)
print(avg)
'''請將下列學生資料整理成一個新的字典:
結果格式需為:
data={
"name": "Tom",
"scores": {
"Math": 80,
"English": 90,
"Science": 70
}
}'''
import json
name = "Tom"
subjects = ["Math", "English", "Science"]
scores = [80, 90, 70]
#zip
dic_data={
'name':name,
'score':dict(zip(subjects, scores))
}
with open('[Link]', 'w', encoding='utf-8') as file:
[Link](dic_data, file, ensure_ascii=False, indent=4)
print(dic_data)
'''已知 [Link] 內容如下:
subject,score
Math,80
English,90
Science,70
請使用 pandas:
讀取 CSV
印出所有資料
計算平均成績'''
import pandas as pd
df=pd.read_csv('[Link]')
'''class student 作業'''
class student:
def __init__(self, name):
[Link] = name
[Link] = {}
def add_score(self, subject, score):
[Link][subject] = score
def average(self):
if len([Link]) == 0:
return 0
return sum([Link]()) / len([Link])
def show_info(self):
print(f'Name:{[Link]}, score:{[Link]},
average:{[Link]()}')
def return_data(self):
return {
'name': [Link],
'scores': [Link],
'average': [Link]()
}
import json
from student_ import student
studentA=student('AMY')
studentA.add_score('ENG', 88)
studentA.add_score('MATH', 66)
data=studentA.return_data()
with open('[Link]', 'w', encoding='utf-8') as f:
[Link](data, f, ensure_ascii=False, indent=4)