2015-07-08 3 views
2

Я новичок в Python и изучаю lambda выражения на данный момент. Я решала учебник программыЛямбда с вложенным, если else не работает

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

Я прошел через этот old post и безуспешно:

>>> max_of_three = lambda x, y, z : x if x > y else (y if y>z else z) 
>>> max_of_three(91,2,322) 
91 

Почему это не возвращающей Z? Это X.

+3

Посмотрите на вашей логике близко. X больше Y, поэтому он возвращает X. –

+1

Разрабатывая то, что Морган объяснил: он никогда не доходит до вашего ... –

+0

Это не имеет ничего общего с лямбдами. – rightfold

ответ

7

В настоящее время вы используете if x > y, который только сравнивает x и y, но вы должны сравнить x с z, а на той же стадии.

max_of_three = lambda x, y, z: x if x > y and x > z else (y if y > z else z) 
print max_of_three(91, 2, 322) 
>>> 322 
1

Вы можете изменить вашу функцию следующим образом:

max_of_three = lambda x, y, z : x if x > y and x > z else (y if y>z else z) 

Ваша проблема в том, что вы не проверить, является ли x также больше, чем z. В вашем случае x больше, чем y, поэтому он просто возвращает x и больше не сравнивает его с z.

4

или сделать его проще:

max_of_three=lambda x,y,z:max((x,y,z)) 

max_of_three(1,2,3) 
3 

Я знаю, что это обман, но с использованием примитивов языка, как правило, проще :-)

+1

Один из большие преимущества python в том, что у него есть бесчисленные библиотеки и функции для _almost_ каждой проблемы. Следовательно, я бы предпочел прочитать документацию, такую ​​как numpy или scipy, и применить ее к моей проблеме, чем начать с нуля. (словом: +1) –

1
>>> max_of_three = lambda x, y, z : x if x>y and x>z else (y if y>z else z) 
>>> max_of_three(91,2,322) 
322 
Смежные вопросы