Определите функцию, чтобы выбрать 2 большее число из 3 чисел, а затем сложите квадрат из 2 чисел - PullRequest
0 голосов
/ 23 января 2019

Определите функцию, которая принимает три числа в качестве аргументов и возвращает сумму квадратов двух больших чисел.

Например, для 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 голосов
/ 23 января 2019

Я пытался использовать списки и списки с помощью метода сортировки.

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

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

OP: -

13
0 голосов
/ 23 января 2019

Ответ Социопата работает, но неэффективен, так как требует двух дополнительных умножений с плавающей запятой. Если вы делаете это для большого количества предметов, это займет вдвое больше времени! Вместо этого вы можете найти два самых больших числа напрямую. По сути, мы сортируем список и выбираем два самых больших, это может быть напрямую следующим образом:

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))
0 голосов
/ 23 января 2019

Вы можете просто определить функцию с помощью 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

0 голосов
/ 23 января 2019

Давайте посмотрим, почему ваш код имеет недостатки. Учитывая сравнение, подобное if a + b > b + c:, подразумевается, что оба значения a и b больше c ложно. b может быть наименьшим числом. Все, что вы знаете, это a > c, поскольку вы можете вычесть b с обеих сторон неравенства.

Вам нужно найти и выбросить наименьшее число. Самый простой способ - вычислить минимум с помощью min и вычесть его, как подсказывает @ ответ Социопата .

Если вы хотите сохранить структуру if-else, вам нужно сравнить цифры по отдельности:

if a > b:
    n1= a
    n2 = b if b > c else c
elif a > c:
    n1, n2 = a, b
else:
    n1, n2 = b, c
0 голосов
/ 23 января 2019

Просто проверьте наименьшее число.Как известно, присвойте значения двум новым переменным, которые будут содержать наибольшее и второе по величине значение и суммируют их квадраты.

Примерно так:

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

позволяет вам иметь только одно месторассчитать вашу формулу:

return big1 * big1 + big2 * big2
0 голосов
/ 23 января 2019

Вы можете использовать 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...