Автор языка Perl Ларри Уолл однажды сказал, что великие программисты имеют три качества: лень, грубость и высокомерие. На первый взгляд ни одно из этих слов не является положительным, но в мире программистов эти слова имеют другой смысл. Во-первых, лень побуждает программистов писать программы, которые помогут им или другим людям выполнять работу эффективнее, чтобы мы не пришлось делать повторяющиеся и трудоемкие задачи; аналогично, если можно решить проблему за 3 строки кода, то мы никогда не напишем 10 строк. Во-вторых, грубость заставляет программистов самостоятельно выполнять работы, которые вы еще даже не запросили, улучшая свою кодировку так, чтобы она была более эффективной, и выполняя задачу за 3 секунды вместо минуты. В-третьих, высокомерие побуждает программистов писать надежный и безошибочный код, поскольку мы пишем код не для того, чтобы получать критику и осуждение, а для того, чтобы другие люди могли восхищаться нами.
Итак, вот интересный вопрос, который стоит обсудить. Нам нужна программа, которая будет находить максимальное число среди трёх введённых чисел. Для любого человека, знающего основы программирования, эта задача простая, даже человек, который ничего не знает о программировании, сможет её выполнить после десятиминутного обучения. Ниже приведена Python-код для решения этой проблемы.```python a = int(input('a = ')) b = int(input('b = ')) c = int(input('c = ')) if a > b: the_max = a else: the_max = b if c > the_max: the_max = c print('Максимальное значение:', the_max)
Однако мы сказали, что программисты ленивы, поэтому многие из них используют тернарное условное выражение для переписывания вышеуказанного кода.
```python
a = int(input('a = '))
b = int(input('b = '))
c = int(input('c = '))
the_max = a if a > b else b
the_max = c if c > the_max else the_max
print('Максимальное значение:', the_max)
Необходимо отметить, что до версии Python 2.5 тернарное условное выражение, используемое в четвертой и пятой строках этого кода, было недоступно. Причина заключается в том, что Гвидо ван Россум (отец Python) считал, что тернарное условное выражение не делает Python более компактным. Поэтому те, кто привыкли использовать тернарное условное выражение в C/C++ или Java (где его также называют "оператором Элвиса", потому что ? :
вместе напоминают длинные волосы известного рокера Элвиса Пресли), использовали свойства короткого замыкания операторов and
и or
, чтобы имитировать тернарное условное выражение. Таким образом, в те времена этот код выглядел бы следующим образом:
a = int(input('a = '))
b = int(input('b = '))
c = int(input('c = '))
the_max = a and b or a if a > b else b
the_max = c and the_max or c if c > the_max else the_max
print('Максимальное значение:', the_max)
Однако такой подход в некоторых случаях может быть некорректным, как показывает следующий пример кода.
a = 0
b = -100
# В данном случае ожидалось вывести значение переменной a,
# но вместо этого получили значение переменной b,
# так как ноль при логических операциях воспринимается как False
print(True and a or b)
# print(a if True else b)
```
Поэтому с версии Python 2.5 был введен тройной условный оператор, чтобы избежать таких проблем (последняя строчка закомментированного кода).
Так вот, а можно ли сделать этот код ещё короче? Ответ — да.
```python
a = int(input('a = '))
b = int(input('b = '))
c = int(input('c = '))
print('Максимальное значение:', (a if a > b else b) if (a if a > b else b) > c else c)
```
Но действительно ли это хорошее решение? Такой сложный выражением не делает ли он код менее понятным? Мы заметили, что во многих проектах разработчики склонны злоупотреблять возможностями языка или его синтаксическим сахаром, превращая простые многократные строки кода в сложные однострочные выражения. Но хорошо ли это?
На этот вопрос я тоже задумывался не один раз. Вот мой ответ:
```python
def the_max(x, y):
return x if x > y else y
a = int(input('a = '))
b = int(input('b = '))
c = int(input('c = '))
print('Максимальное значение:', the_max(the_max(a, b), c))
```
В этом коде я определил вспомогательную функцию `the_max`, которая находит большее из двух переданных значений. Таким образом, последний вывод выполняется двумя вызовами этой функции, что позволяет найти максимальное значение среди трёх чисел. Теперь код стал гораздо более читаемым. Использование вспомогательных функций вместо сложных выражений — отличное решение, поскольку сравнение значений теперь происходит внутри функции, которую можно использовать повторно и цепочками.Конечно, многие языки уже имеют встроенные функции для сравнения значений (обычно они являются частью стандартной библиотеки), и Python также имеет встроенную функцию `max()`. Она использует возможность передачи произвольного количества аргументов или одного итерируемого объекта для нахождения максимального значения. Однако идея использования вспомогательных функций для упрощения сложных выражений заслуживает внимания и стоит того, чтобы поделиться ею со всеми.
```python
a = int(input('a = '))
b = int(input('b = '))
c = int(input('c = '))
print('Максимальное значение:', max(a, b, c))
```
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )