因為特殊原因,昨天沒有做題。今天繼續~
原題鏈接:http://www.runoob.com/python/python-exercise-example2.html
題目:
企業發放的獎金根據利潤提成。利潤(I)低於或等於10萬元時,獎金可提10%;
利潤高於10萬元,低於20萬元時,低於10萬元的部分按10%提成,高於10萬元的部分,可提成7.5%;
20萬到40萬之間時,高於20萬元的部分,可提成5%;
40萬到60萬之間時高於40萬元的部分,可提成3%;
60萬到100萬之間時,高於60萬元的部分,可提成1.5%;
高於100萬元時,超過100萬元的部分按1%提成。
從鍵盤輸入當月利潤I,求應發放獎金總數?
我的代碼:
def cal(i): if i <=100000: bonus=i*0.1 elif 100000<i<=200000: bonus=10000+(i-100000)*0.075 elif 200000<i<=400000: bonus=10000+7500+(i-200000)*0.05 elif 400001<i<=600000: bonus=10000+7500+10000+(i-400000)*0.03 elif 600001<i<=1000000: bonus=10000+7500+10000+6000+(i-600000)*0.015 elif i>1000000: bonus=10000+7500+10000+6000+6000+(i-1000000)*0.01 #代碼繁瑣,而且每一個階段獲得的利潤最大值都要手動去算,很麻煩 print(bonus)
思考:
看到了練習的答案,發現可以用for循環來實現,減少了要自己手動輸入和計算的工作量!所以每個階段的分界和利潤比,都以可以迭代的列表的形式寫入函數中,具體看下面。。。
def cal2(i): profit=[1000000,600000,400000,200000,100000,0] rate = [0.01,0.015,0.03,0.05,0.075,0.1] #同樣的index,profit是該rate的下限,便於接下來由大到小迭代 bonus=0 for x in range(0,6): if i>profit[x]: #先判斷i屬於哪個級別開始算 bonus += (i-profit[x])*rate[x] i=profit[x] #把那個級別的下限賦值給i,繼續for循環 print(bonus)
利用了列表可以迭代的特性,真的方便了很多~本來還想過用字典一一對應地存profit和rate,但是字典是沒有順序的,不能用於這樣由大到小的循環判斷。