python2.7练习小例子(二)
????2):題目:企業發放的獎金根據利潤提成。利潤(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,求應發放獎金總數?
????程序分析:請利用數軸來分界,定位。注意定義時需把獎金定義成長整型。
????程序源代碼:
?
#!/usr/bin/python # -*- coding: UTF-8 -*- i = int(raw_input('凈利潤:')) arr = [1000000,600000,400000,200000,100000,0] rat = [0.01,0.015,0.03,0.05,0.075,0.1] r = 0 for idx in range(0,6): if i>arr[idx]: r+=(i-arr[idx])*rat[idx] print (i-arr[idx])*rat[idx] i=arr[idx] print r????以上實例輸出結果為:
?
凈利潤:120000 1500.0 10000.0 11500.0??? 再來看其他例子:
????使用if...elif...else語句逐一判斷:
?
#!/usr/bin/python # -*- coding: UTF-8 -*-import sys reload(sys) sys.setdefaultencoding('utf-8') x = int(raw_input("凈利潤:")) if x<=100000: bonus=x*0.1 print u"獎金:",bonus,u"元" elif 100001<x<=200000: bonus=10000+(x-100000)*0.075 print u"獎金:",bonus,u"元" elif 200001<x<=400000: bonus=10000+7500+(x-200000)*0.05 print u"獎金:",bonus,u"元" elif 400001<x<=600000: bonus=10000+7500+10000+(x-400000)*0.03 print u"獎金:",bonus,u"元" elif 600001<x<=1000000: bonus=10000+7500+10000+6000+(x-600000)*0.015 print u"獎金:",bonus,u"元" elif 600001<x<=1000000: bonus=10000+7500+10000+6000+6000+(x-600000)*0.01 print u"獎金:",bonus,u"元"??? 還有一種:
?
#!/usr/bin/python # -*- coding: UTF-8 -*-i = int(raw_input('凈利潤:')) I = [1000000,600000,400000,200000,100000,0] r = [0.01,0.015,0.03,0.05,0.075,0.1] for j in range(len(I)): if i > I[j]: b = [0,0,0,0,0,0] b[j] = i -I[j] for k in range(j+1,len(I)): b[k] = I[k-1] bonus = sum(map(lambda (i1,i2): i1 * i2,zip(b,r))) break print '獎金:',bonus????使用切片:
?
#!/usr/bin/python # -*- coding: UTF-8 -*-value=int(raw_input('please input profit: ')) list1=[1000000,600000,400000,200000,100000,0] list2=[0.01,0.015,0.03,0.05,0.075,0.1] list3=[400000,200000,200000,100000,100000] for i in range(6): if value >list1[i]: v1=(value-list1[i])*list2[i] print v1 list2_new=list2[i+1:6] list3_new=list3[i:5] v2=sum(map(lambda (x,y):x*y,zip(list2_new,list3_new))) print v2 print v1+v2 break????Python中的列表可以嵌套,這樣外層列表就跟數組一樣,內層的是對象。不過Python的列表數據類型不一定一樣,更加靈活了:
?
#!/usr/bin/python3Bonus = 0; BonusRateList = [[100,0.010],[60,0.015],[40,0.030],[20,0.050],[10,0.075],[0,0.100]]; Profit = 120000; Profit /= 10000; for i in range(0, len(BonusRateList)) : if (Profit > BonusRateList[i][0]) : Bonus += ((Profit - BonusRateList[i][0]) * BonusRateList[i][1]); Profit = BonusRateList[i][0]; print (Bonus * 10000);????使用字典控制利潤與提成比例的匹配:
?
#!/user/bin/env python # coding=utf-8# 計算公司的年度獎金,單位:萬元 num = int(raw_input("請輸入今年的公司利潤:")) obj = {100: 0.01, 60: 0.015, 40: 0.03, 20: 0.05, 10: 0.075, 0: 0.1} keys = obj.keys() keys.sort() keys.reverse() r = 0 for key in keys: if num > key: r += (num - key) * obj.get(key) num = key print "今年的獎金為:", r, "萬元。"????Python3 測試方法:
?
def get_reward(I): ????rewards = 0 ????if I <= 10: ????????rewards = I * 0.1 ????elif (I > 10) and (I <= 20): ????????rewards = (I - 10) * 0.075 + get_reward(10) ????elif (I > 20) and (I <= 40): ????????rewards = (I - 20) * 0.05 + get_reward(20) ????elif (I > 40) and (I <= 60): ????????rewards = (I - 40) * 0.03 + get_reward(40) ????elif (I > 60) and (I <= 100): ????????rewards = (I - 60) * 0.015 + get_reward(60) ????else: ????????rewards = get_reward(100) + (I - 100) * 0.01 ????return rewards if __name__ == '__main__': ????i = 120000 ????print("凈利潤:", i) ????print("發放的獎金為:", get_reward(i / 10000) * 10000)????可以同時使用兩種方式創建生成器: 生成器推導式 與 使用yield關鍵字構造生成器函數, 如下所示:
?
#使用兩種方式創建生成器 a=[100,60,40,20,10,0] b=[0.01,0.015,0.03,0.05,0.075,0.1] #生成器函數 def f(x): for i in range(len(a)): if n>a[i]: #生成器推導式 c=(a[j]-a[j+1] for j in range(i,len(a)-1)) break r=sum(map(lambda x,y:x*y,b[i:],[(n-a[i])]+list(c))) yield r*10000 k=int(input("是否繼續計算獎金?是:1, 否:0\n")) while k: n=int(input('請輸入利潤,單位(萬元):')) print('應發獎金為:',next(f(n)),'(元)') print() k=int(input("是否繼續計算獎金?是:1, 否:0\n")) print('感謝使用,程序結束!')??? 最后一個我感覺比較有意思,其它的怎么說呢,萬變不離其宗吧。大家可以看下,大神們的代碼習慣。如果感覺不錯的話,請多多點贊支持哦。。。
轉載于:https://www.cnblogs.com/luyaran/p/luyarans.html
總結
以上是生活随笔為你收集整理的python2.7练习小例子(二)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 翻译:XtraDB/InnoDB中的AU
- 下一篇: 管道符和作业控制 shell变量