Упрощение условных операторов Python

Я новичок в программировании. Есть ли способ упростить условные операторы

a = 50; b = 70; c = 60; 

# Classification 

if (a == b and b == c and c ==a):
   print('Equilateral triangle')

elif (a == b or b == c or c == a):
   print('Isosceles triangle')

elif (a!=b and b!=c and c!=a):
   print('Scalene triangle')
if a == b == c
Phydeaux 01.03.2019 12:45

В качестве примечания вы можете подумать о включении неравенств для случая, когда a b и c вообще не образуют треугольника.

taras 01.03.2019 12:45
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
2
74
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Вы можете сократить сравнения, в которых используется and, используя цепные сравнения и отбрасывая один из тестов (они взаимоисключающие), используя вместо этого else:

if a == b == c:
   print('Equilateral triangle')

elif a != b != c != a:
   print('Scalene triangle')

else:
   print('Isosceles triangle')

Обратите внимание, что синтаксис if Python не требует круглых скобок вокруг тестовых выражений.

Затем вы можете просмотреть эти значения как набор и проверить, сколько элементов находится в наборе:

unique_lengths = len({a, b, c})

if unique_lengths == 1:
   print('Equilateral triangle')

elif unique_lengths == 2:
   print('Isosceles triangle')

else:
   print('Scalene triangle')

Затем это можно превратить в поиск по списку, сопоставив 1, 2 и 3 с именами классов треугольников; Я вставил None в 0 позицию:

classes = [None, 'Equilateral', 'Isosceles', 'Scalene']
print(classes[len({a, b, c})], 'triangle')

Спасибо за помощь. Наш лектор призывает нас использовать скобки. Мы еще не узнали о наборе.

BiLAL 02.03.2019 03:57

@BiLAL: Тогда ваш лектор идет против стандартное руководство по стилю Python, но пока лучше придерживаться соглашений, которые они установили. :-) Скоро вы столкнетесь с множествами, они могут содержать только уникальные элементы (что проверено на равенство) и допускают быструю проверку принадлежности (этот набор содержит это конкретное значение?), помимо других удобных операций. Превращение a, b, c в набор, когда среди этих 3 переменных есть общие значения, означает, что у вас будет набор с менее чем 3 значениями, и мы можем использовать это, чтобы подсчитать, сколько сторон равны.

Martijn Pieters 02.03.2019 15:52

Спасибо Мартыджин. Я просмотрел руководство по стилю, и это было очень полезно. Также я начал узнавать о наборах на YouTube. :)

BiLAL 02.03.2019 23:38

Есть ли какой-либо документ, на который я могу ссылаться и найти список всех возможных сравнений для разных сценариев?

BiLAL 06.03.2019 12:05

@BiLAL: не уверен, что вы имеете в виду, но это звучит как очень широкий вопрос. Справочная документация для сравнений, на которую я уже ссылался, и документация для стандартных типов охватывают любые операции конкретного типа.

Martijn Pieters 06.03.2019 12:28

Использование списка:

lis = [a,b,c]
lis.sort()
if lis[0] == lis[-1]:
    print("Equilateral triangle")
elif lis[0] == lis[1] or lis[-1] == lis[1]:
    print("Isosceles triangle")
else:
    print("Scalene triangle")

Спасибо за помощь. Но я еще не узнал о списке.

BiLAL 02.03.2019 03:56

Это нормально . Но через несколько месяцев вы обнаружите, что коды от Martijn настолько ясны и гениальны.

Happy Boy 02.03.2019 06:00

Другие вопросы по теме