2016-08-10 3 views
1

Эта проблема взята из codingbat. Учитывая два значения int, верните их сумму. Если эти два значения не совпадают, верните двойную сумму.Python однострочный оператор if else

Я пытаюсь решить эту проблему в одной строке:

def sum_double(a, b): 
    return 2*(a+b) if (a == b) else return a+b 

Но я получаю сообщение об ошибке, и я не знаю, почему. Поблагодарили бы за любую помощь.

+0

Это не если/другое * заявление * на одной линии; это условное выражение *, выбирая одно из двух значений, а не одно из двух операторов return. – user2357112

+0

опустить второй 'return' – chapelo

ответ

9

Вы не можете получить возврат в предложении else. Это должно быть:

def sum_double(a, b): 
    return 2*(a+b) if (a == b) else a+b 
4

Вы должны удалить второй return.

def sum_double(a, b): 
    return 2*(a+b) if a == b else a+b 

Значение выражения 2*(a+b) if a == b else a+b является то, что вы на самом деле хотите, чтобы вернуться.

8

У вас есть 2 варианта:

  1. Используйте if/else заявление:

    def sum_double(a, b): 
        if (a == b):         #if/else statement 
         return 2*(a+b) # <--- return statement #^ 
        else:          #^ 
         return a+b  # <--- return statement #^ 
    
  2. Используйте if/else условное выражение:

    def sum_double(a, b): 
        return 2*(a+b) if (a == b) else a+b 
    #   (^       ^) <--- conditional expression 
    # (^         ^) <--- return statement 
    

еа ч имеет другой синтаксис и смысл

0

В Python, True, False такие же, как 1, 0:

def sum_double(a, b): return ((a==b) + 1) * (a+b) 

Или с помощью лямбда,

sum_double = lambda a, b: ((a==b) + 1) * (a+b) 
Смежные вопросы