Python 100例實戰(zhàn)訓(xùn)練——day01
參考資料:Python 100例
Python 練習(xí)實例1
Python 100例題目:有四個數(shù)字:1、2、3、4,能組成多少個互不相同且無重復(fù)數(shù)字的三位數(shù)?各是多少? 程序分析:可填在百位、十位、個位的數(shù)字都是1、2、3、4。組成所有的排列后再去掉不滿足條件的排列。
解法一:
# 基礎(chǔ)解法,循環(huán)嵌套 l = [] for i in range(1,5): for j in range(1,5): for k in range(1,5): if( i != k ) and (i != j) and (j != k): a = 100*i+10*j+k l.append(a) print(f"共有{len(l)}個",l)
解法二:
# 調(diào)用第三方庫,排列組合 # # 組合 # from scipy.special import comb # # 階乘 # from scipy.special import factoral # 排列 from scipy.special import perm print( perm(4,3)) # 從序列中取2個元素進行組合、元素不允許重復(fù) import itertools as it for e in it.permutations('1234', 3): print(''.join(e), end=', ')
itertools的使用可參考:Python的排列組合函數(shù)
Python 練習(xí)實例2
Python 100例題目:企業(yè)發(fā)放的獎金根據(jù)利潤提成。 利潤(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%提成; 從鍵盤輸入當(dāng)月利潤I,求應(yīng)發(fā)放獎金總數(shù)? 程序分析:請利用數(shù)軸來分界,定位。注意定義時需把獎金定義成長整型。
解法一:
# 基礎(chǔ)版 if判斷 i = int(input('凈利潤(萬元):')) if i <=10: account = i*10/100 elif i <=20: account = (i-10)*7.5/100+10*10/100 elif i <=40: account = (i-20)*5/100+10*7.5/100+10*10/100 elif i<=60: account = (i-40)*3/100+20*5/100+10*7.5/100+10*10/100 elif i <=100: account = (i-60)*1.5/100+20*3/100+20*5/100+20*7.5/100+10*10/100 else: account = (i-100)*1/100+40*1.5/100+20*3/100+20*5/100+10*7.5/100+10*10/100 print(f"利潤提成{account}")
解法二:
# 數(shù)軸定位 i = int(input('凈利潤(萬元):')) arr = [100,60,40,20,10,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)
解法三:
# cut 區(qū)間切分===》邏輯有點兒復(fù)雜,主要是想給大家介紹下pandas的cut函數(shù),數(shù)據(jù)切分,解決這個問題比較復(fù)雜,用在其他問題上還是比較方便的 import pandas as pd # 數(shù)軸定位 I= int(input('凈利潤(萬元):')) bins = [0, 11, 21, 41, 61, 101,1000000000000] #1000000000000 bins要比labels多一個,選一個特別大的數(shù) rats = [0.1, 0.075, 0.05, 0.03, 0.015, 0.01] par = [10,10,20,20,40,"nan"] df = pd.DataFrame(list(zip(bins,rats,par)),columns=["區(qū)間下限","點數(shù)","參數(shù)"]) labels = df.index.to_list() idx = pd.cut([I],bins,labels=labels,right= True)[0] account = 0 for i in range(idx): rate0 = df.iloc[i,1] parm0 = df.iloc[i,2] account += rate0*parm0 # print(account) account = account + (I-df.iloc[idx,0]+1)*df.iloc[idx,1] print(account)
Python 機器學(xué)習(xí)
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。