如何优化加权值并输出最少的行和字符?
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)+"%"
如果 a
、b
、c
和 d
是整数,那么您可以通过记下 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
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)+"%"
如果 a
、b
、c
和 d
是整数,那么您可以通过记下 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