iT邦幫忙

4

[自學Python紀錄] HackerRank 新手30天挑戰-Day02

Hi there! 我是嘟嘟~受到前輩啟發,想說可以紀錄一下自己練習的過程,小女子為程式超超菜鳥,此系列非教學文,僅為個人解題筆記,可能有錯誤或未補充詳盡之處,歡迎前輩們不吝指教!也歡迎正在自學的夥伴一起討論學習~


Day 2: Operator

給定伙食的價格(伙食的基本成本),小費百分比(作為小費添加的伙食價格的百分比)和稅費百分比(作為稅費添加的伙食價格的百分比),查找並打印這頓飯的總費用。

注意:請確保使用精確值進行計算,否則可能會導致舍入結果不正確!
Note: Be sure to use precise values for your calculations, or you may end up with an incorrectly rounded result!

輸入格式

有幾行數字輸入:
第一行有一個雙精度數字(稅費和小費前的餐費)。
第二行有一個整數(作為小費的百分比)。
第三行有一個整數(作為稅金的百分比)。

輸出格式

打印總餐費,其中是整個賬單的四捨五入整數結果(含稅和小費)。

樣本輸入

12.00
20
8

樣本輸出

15

  
 
 

初始格式

import math
import os
import random
import re
import sys

# Complete the solve function below.
def solve(meal_cost, tip_percent, tax_percent):

if __name__ == '__main__':
    meal_cost = float(input())

    tip_percent = int(input())

    tax_percent = int(input())

    solve(meal_cost, tip_percent, tax_percent)

  
  
 

我的解答 (已修改)

def solve(meal_cost, tip_percent, tax_percent):
    total_cost = meal_cost * (1 + (tip_percent + tax_percent) / 100)
    return round(total_cost)


if __name__ == '__main__':
    meal_cost = float(input())

    tip_percent = int(input())

    tax_percent = int(input())

    print(solve(meal_cost, tip_percent, tax_percent))

  
 
 

補充:


1 則留言

3
一級屠豬士
iT邦大師 1 級 ‧ 2020-04-27 23:24:47

我來吐槽一下.

  1. 你 import 了一些沒使用的module, 這樣不管用不用都import
    是很糟糕的壞習慣,寫程式必須是要必要的才寫,無意義的會讓後續維護困難.
    2.這的題目很簡單,沒有使用 function 的必要,就是非用不可的理由,那何必硬要使用?徒增無謂的程式.
    3.雖然題目沒要求,但是你可以加強做印出,輸入的提示,哪怕一行來說明,需要輸入三行資料.

  2. 計算部分:

total_cost = meal_cost + meal_cost*tip_percent/100 + meal_cost*tax_percent/100

這樣的寫法不是很好,兩次除法運算... 

total_cost = meal_cost * (1 + (tip_percent + tax_percent) / 100) 
除法運算,盡量少做,因為會產生誤差.當然我寫的計算方式,也不一定比你寫的好.
希望你能夠注意到,並且在後續的程式中,多用幾種方法,這時候function 就派上用場了,
來做比較.得到自己的心得,這才是重要的.

另外既然辛辛苦苦寫了程式,執行結果,最好也紀錄起來,以後你再看的時候,會更有幫助.

雖然我是吐槽,但你也不用太難過,只是藉此先提醒你啦.
另外 你的 * / 是與變數連在一起的,最好能改掉,以後減少打錯看錯的機會.
加油!

看更多先前的回應...收起先前的回應...
Pondudu iT邦新手 5 級 ‧ 2020-04-28 00:46:13 檢舉

邦友您好:
非常感謝您的回覆及建議!小的受教了!!

  • 思考題目import的原因,不要題目寫什麼就照抄,去思考寫入函式庫的必要性
  • 加強輸入和印出的提示,讓別人看得懂,自己之後回來看也可以更快速複習自己當初為什麼這樣寫
  • 除法運算盡量少做,因為比較容易產生誤差
  • 運算子和變數空格隔開,避免閱讀及打錯程式,降低錯誤的可能性
  • 嘗試寫出不同的解法,有沒有更乾淨易讀的方式
  • 執行結果也一起紀錄,方便複習

小的會謹記在心!謝謝您的閱讀與指教!!

Pondudu iT邦新手 5 級 ‧ 2020-04-28 01:01:32 檢舉

不好意思,想請教一下大大:

除法運算會造成誤差,是只有Python比較會發生的狀況,還是所有程式語言都盡量少用除法比較好?

查到這篇文章:【精確的浮點數運算?
其中寫到"但是電腦的記憶體是有限的,因此只能存有限的二進位小數,沒辦法完全等於 0.1,所以 Python 會選擇一個近似值來取代",是因為電腦硬體的關係嗎?

你可以再安裝幾種程式語言測試看看.盡量養成自己測試推演的習慣,
這時候你就會發覺到,寫成程式,可以重複執行的好處了.
例如 Ruby, 可以做對照.

以後你還會遇到有些人很堅持 先算除的,得到比例數,再乘以天數或個數. 然後得到一堆誤差放大的,最後再加總,唉....

那句話是不完全正確的,不是 Python 選擇近似值,而是數位系統的
天然限制.這個你先了解而不必鑽進去理解.

之前你發問這篇
https://ithelp.ithome.com.tw/questions/10197629
我有回答建議一些電子書.
資訊這條路很長也很有趣,不用心急,慢慢來,多欣賞路上的風景以及路邊的小碎石跟小草小花,不用急著趕路.

Pondudu iT邦新手 5 級 ‧ 2020-04-28 09:27:14 檢舉

明白了>-<! 謝謝您指出小的問題點!!

會再去多多閱讀! 也希望自己能抓到學習的步調,感激不盡!!

我要留言

立即登入留言