0% found this document useful (0 votes)
3 views9 pages

Python

文档包含多个Python编程任务,包括创建电子钱包类、计算电影票价、学号修正功能、递归计算数字总和、读取文本文件并转换为字典、投资组合类、使用Pandas进行数据分析等。每个任务提供了相应的代码示例和功能描述,涵盖了面向对象编程、条件判断、字符串操作、递归、文件处理和数据分析等主题。整体上,这些任务旨在提高学生的编程技能和对Python语言的理解。

Uploaded by

kayla960226
Copyright
© All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
3 views9 pages

Python

文档包含多个Python编程任务,包括创建电子钱包类、计算电影票价、学号修正功能、递归计算数字总和、读取文本文件并转换为字典、投资组合类、使用Pandas进行数据分析等。每个任务提供了相应的代码示例和功能描述,涵盖了面向对象编程、条件判断、字符串操作、递归、文件处理和数据分析等主题。整体上,这些任务旨在提高学生的编程技能和对Python语言的理解。

Uploaded by

kayla960226
Copyright
© All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd

'''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)

You might also like