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}') # 使用字串格式化的方式輸出,取出小數點兩位數
微信扫码关注
抖音扫码关注