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

How to optimize weighted values and output to least amount of lines and characters?

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)+"%"

所以这里我有一个函数可以计算每个输入的加权分数,以及为了获得至少 90% 的总分,某人必须获得的最终分数。如果该值不是整数,在本例中为 "o",则四舍五入到最接近的大整数。如果分数大于 100 return,则使用 "impossible" 代替不同的消息。

我已经将 return 语句与 if 子句放在一起。

所以我的问题是,我如何优化它并用更少的代码行来做到这一点?

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

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)+"%"

如果 abcd 是整数,那么您可以通过记下 o 上的最小分数来进一步简化是 1/4 即 0.25,所以我们可以加上 0.3 和四舍五入:

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)+"%"

这有 127 个字符。

您还可以使用 old-style string formatting 进一步简化并去掉圆:

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

我认为这是 114。

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

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