定义一个函数以从3个数字中选择2个更大的数字,然后将2个数字的平方求和

时间:2019-01-23 04:18:10

标签: python python-3.x if-statement

定义一个以三个数字为参数并返回两个较大数字的平方和的函数。

例如,给定6,7,8,我定义的函数应返回113

当我给出代码时,它可以解决大多数问题,但是显然有一些我没有尝试过的可能性吗?我认为我的代码有缺陷,但不确定是否还有其他可能性。非常感谢您的帮助,非常感谢!

def bigger_sum(a,b,c):
    if(a+b>b+c):
        return(a*a+b*b)
    if(a+c>b+c):
        return(a*a+c*c)
    if(b+c>a+c):
        return(b*b+c*c)

6 个答案:

答案 0 :(得分:2)

您可以使用min来解决此问题:

def big2_sqrsum(a,b,c):
    x = min(a,b,c)
    return (a*a + b*b + c*c) - (x*x)

print(big2_sqrsum(6,7,8))

输出:

113

使用if-else的替代解决方案

def big2_sqrsum2(a,b,c):
    if a < b and a <c:
        return b*b + c*c
    elif b < a and b < c:
        return a*a + c*c
    elif c < a and c < b:
        return a*a + b*b

答案 1 :(得分:1)

只需检查最小的数字。众所周知,将值分配给两个新变量,这些变量将拥有最大和第二个最大值并求和它们的平方。

类似这样的东西:

out = []
i=0
for x in b: 
    i = np.argmax( a[i:] >= x ) + i
    out.append( i )

只允许您一个位置来计算公式:

big1 = 0
big2 = 0

if ([a is smallest]):
    big1 = b
    big2 = c

elif ([b is smallest]):
    big1 = a
    big2 = c

elif ([c is smallest]):
    big1 = a
    big2 = b

答案 2 :(得分:1)

让我们看看为什么您的代码存在缺陷。给定类似SELECT TOP 1 'Column One', 'Column Two', 1 AS SortOrder FROM [dbo].[myTable] WHERE [Col1] = @myValue AND @@RowCount > 0 UNION ALL SELECT cast([Col1] AS varchar), cast([Col2] AS varchar), 2 AS SortOrder FROM [dbo].[myTable] WHERE [Col1] = @myValue AND @@RowCount > 0 ORDER BY SortOrder 的比较,则if a + b > b + c:a都大于b的暗示是错误的。 c可以是最小的数字。您只知道b,因为您可以从不等式的两边减去a > c

您需要查找并丢弃最小的数字。最简单的方法是按照@Sociopath's answer的建议,用b计算最小值并将其减去。

如果要保留min结构,则必须分别比较数字:

if-else

答案 3 :(得分:1)

您可以使用min()轻松定义函数

 def two_bigger_sum(num1,num2,num3):
    min_num = min(num1,num2,num3) # it returns minimum number
    return ((num1**2 + num2**2 + num3**2)-(min_num**2)) # num**2 = square of num


print(two_bigger_sum(6,7,8))

输出= 113

答案 4 :(得分:1)

Sociopath的答案有效,但效率低下,因为它需要两个额外的浮点乘法。如果您要对大量物品执行此操作,则将花费两倍的时间!相反,您可以直接找到两个最大的数字。基本上,我们对列表进行排序并取两个最大的列表,可以直接如下:

def sumsquare(a,b,c):
    # Strategy: swap, and make sure c is the smallest by the end
    if c > b:
        b, c = c, b
    if c > a:
        a, c = c, a
    return a**2 + b**2

# Test:
print(sumsquare(3,1,2))
print(sumsquare(3,2,1))
print(sumsquare(1,2,3))
print(sumsquare(1,3,2))
print(sumsquare(2,1,3))
print(sumsquare(2,3,2))

答案 5 :(得分:1)

我尝试将列表理解和列表切片与排序方法一起使用。

F1 F2 F3 F4 F6 
9  9  8  8  8  

OP:-

def b2(l):
    return sum([x**2 for x in sorted(l)[1:]])

print(b2([1,2,3]))