【每日一题0708】魔法奖金

凌熙准备给的三名表现优异的助教老师发放总共851个W的魔法奖金,尽可能考虑到他们在考虑期间的缺勤天数。假设助教 a 缺勤18 天,助教 b 缺勤15 天,助教 c 缺勤12 天。缺勤越多,奖金越低。每个助教应该得到多少奖金?凌熙认为 a 应该得到230 个W,b得到276 个W,c得到345 个W。因为230 * 18 = 276 * 15 = 345 * 12 ,总和是230 + 276 + 345 = 851

任务:
给你一个表示缺勤天数的列表 li,和一个奖金总数 total,函数将按照凌熙的方式返回所有助教的公平奖金列表,其顺序与他们缺勤天数相同。缺勤天数和奖金总数均为正整数。

题目难度:中等
题目来源:codewars

def bonus(li, total):
    pass
    
assert bonus([22, 3, 15], 18228) == [1860, 13640, 2728]
assert bonus([8, 14, 11], 23541) == [10241, 5852, 7448]
assert bonus([25, 22, 15, 22, 22], 5213) == [858, 975, 1430, 975, 975]

三个断言结果是ok的,想不到更好的方法了

def bonus(li,total):
    beishu=[]
    for i in range(len(li)):
        x=li[0]/li[i]
        beishu.append(x)
    ss=0
    for i in range(len(beishu)):
        ss=beishu[i]+ss
    ave=int(total/ss)
    res=[]
    for i in range(len(beishu)):
        yy=int(beishu[i]*ave)
        res.append(yy)
    return res

def bonus(li, total):
	li_x=[]
	for x in li:
		li_x.append(1/x)
	a=total/sum(li_x)
	for i in range(len(li_x)):
		li[i]=int(a*li_x[i])
	#print(li)
	return li