a647: 投資專家
這篇教學會示範 ZeroJudge 基礎題庫「a647: 投資專家」的解題過程。
題目需求
題目會提供 n 組測驗內容,每組內容為 m 和 p 兩個數字,m 代表藝術品購入的金額,p 為藝術品目前的價值,使用程式計算獲利率 x,若 x >= 10.00% 或 x <= -7.00%,輸出「dispose」,反之輸出「keep」。
題目連結:a647: 投資專家
解答
這題的關鍵在於「小數點的誤差」,由於 Python 的小數點並非真正顯示的長相,所以如果單純計算或使用 round 的方法,會造成結果的判斷錯誤 ( 例如 2.5 其實是 2.4999... 參考「round(x, y)」)。
爲了避免這種狀況發生,除了不要使用 round 四捨五入,需要再透過加減一個誤差數值 0.00001 ( 比計算出來的小數位數還要小的數值 ),來處理肉眼看不見的數字誤差,處理誤差後,使用單純的邏輯判斷與格式化字串,就能得到正確的結果。
n = int(input())
for i in range(n):
m, p = map(int, input().split()) # 將 m 和 p 轉換成數字
r = (p-m)/m*100 # 因為輸出結果為百分比,所以乘以 100
if r<0:
r = r - 0.000001 # 如果結果小於 0,減去處理誤差的數值
elif r>0:
r = r + 0.000001 # 如果結果大於 0,加上處理誤差的數值
if r >= 10 or r <= -7: # 進行獲利的邏輯判斷
t = 'dispose'
else:
t = 'keep'
print(f'{r:.2f}% {t}') # 使用字串格式化的方式輸出,取出小數點兩位數
意見回饋
如果有任何建議或問題,可傳送「意見表單」給我,謝謝~