Python 如何优化加权值并输出最少的行数和字符数?

Python 如何优化加权值并输出最少的行数和字符数?,python,class,optimization,weighted,Python,Class,Optimization,Weighted,所以这里我有一个函数,它计算每个输入的加权分数,以及一个人为了获得至少90%的总分数必须获得的最终分数。如果该值不是整数,在本例中为o,则四舍五入到最接近的上整数。如果分数大于100,则返回另一条消息,改为不可能 我已经把return语句和if子句放在一起了 所以我的问题是,我如何优化它,并用更少的代码行完成这项工作?下面是一个144字符的解决方案: def finalvalue(a,b,c,d): o=round(450-a-(b*2+c+d)*.75+.3) return (

所以这里我有一个函数,它计算每个输入的加权分数,以及一个人为了获得至少90%的总分数必须获得的最终分数。如果该值不是整数,在本例中为o,则四舍五入到最接近的上整数。如果分数大于100,则返回另一条消息,改为不可能

我已经把return语句和if子句放在一起了


所以我的问题是,我如何优化它,并用更少的代码行完成这项工作?

下面是一个144字符的解决方案:

def finalvalue(a,b,c,d):
    o=round(450-a-(b*2+c+d)*.75+.3)
    return ("Impossible, you " if(o)>100 else "You ")+"would need a "+str(o)+"%"
如果a、b、c和d是整数,则可以进一步简化,注意o上的最小分数为1/4,即0.25,因此我们可以加上0.3并四舍五入:

import math
def finalvalue(a,b,c,d):
 o=math.ceil(450-a-(b*2+c+d)*.75)
 return("Impossible, y"if o>100 else"Y")+"ou would need a "+str(o)+"%"
这是127个字符

您还可以简化进一步的使用并摆脱该回合:

def finalvalue(a,b,c,d):
 o=round(450-a-(b*2+c+d)*.75+.3)
 return("Impossible, y"if o>100else"Y")+"ou would need a "+str(o)+"%"
我想这是114

如果您可以访问Python 3.8,则可以使用lambda表达式和,以减少到104个字符:

def finalvalue(a,b,c,d):
 o=450.9-a-(b*2+c+d)*.75
 return("Impossible, y"if o>100else"Y")+"ou would need a %d%%"%o

请不要破坏你的帖子,为别人做更多的工作。通过在Stack Exchange SE网络上发布,您已根据a授予SE分发内容的不可撤销权利,即无论您未来的选择如何。根据SE政策,分发非故意破坏版本。因此,任何故意破坏行为都将恢复原状。请参阅:。如果允许删除,帖子下方左侧有一个删除按钮,但它仅在浏览器中,而不是移动应用程序中。请停止破坏您的帖子。我花了那么多时间和精力给你一个答案,这一点都不值得尊重。没有理由不离开目前的岗位。当你发现问题时,你必须让我知道最好的解决方案是什么。我今天看了多一点,但什么也看不见。这不公平——每个人都应该能看到它并从中学习。这里是兄弟:最终价值=λa,b,c,d:[Y,不可能,Y][f:=450 inta+.75*2*b+c+d>100]+fou需要一个{f}%我知道这必须是一个与Strings有关的东西基本上我们赢了你。我现在很满足
finalvalue=lambda a,b,c,d:("Y","Impossible, y")[(o:=450.9-a-(b*2+c+d)*.75)>100]+"ou would need a %d%%"%o