Joulence
@Joulence
Раньше изучал веб, теперь python

Как правильно исправить код для вывода if\else?

https://repl.it/@Joulence/vectorsfigure
Есть такой код. Работает +- неплохо, но есть недочёт. Код определяет вид треугольника по сторонам и часто выводит два результата или иногда три. Как улучшить, изменить или даже переписать код, чтобы выводило всегда одно значение, а не больше одного, как на картинке:
5eed1e9290376932259168.png
Всё считай написано на if \ elif
  • Вопрос задан
  • 83 просмотра
Решения вопроса 2
@dmshar
Странный вопрос. Как раз такой вывод - правильный. Согласно вашему-же определения ваш треугольник есть одновременно и простым (3 < 4+5; 4<3+5;5<3+4) и прямоугольным 25= 9+16. А что код должен делать в таких случаях?
Что бы выводило "ТОЛЬКО ОДНО" - ваши определения (не код, а именно не определения!) должны быть взаимоисключающими. У вас это не так.
Ответ написан
@EzikBro
Если вы хотите исправить конкретно проблему множественного вывода, то замените все if, кроме первого на elif.
Но тогда сразу появится проблема с неправильным определением треугольника: для любого существующего функция выведет "Простой треугольник". Чтобы избежать этого, нужно переставить проверки местами (правильный, прямоугольный, равнобедренный, простой, не существует (равнобедренный и прямоугольный можно поменять местами - смотря, что важнее)).

Чтобы не исправлять много разных ошибок и упростить код для двух разных языков вам лучше написать отдельные функции вида is_right(a, b, c).
Тогда можно написать что-то вроде:
def triangle(a, b, c):
    #Отсортируем стороны в порядке возрастания для удобства
    a, b, c = sorted([a, b, c])

    if c < a + b:
        if is_equilateral(a, b, c):
            print("Equilateral")
        elif is_right(a, b, c) and is_isosceles(a, b, c):
            print("Right isosceles")
        elif is_right(a, b, c):
            print("Right")
        elif is_isosceles(a, b, c):
            print("Isosceles")
        else:
            print("Simple")
    else:
        print("Triangle doesn't exist")

    repeat = input("Repeat - y\nExit - n\n")
    if repeat == "y":
        triangle1()
    elif repeat == "n":
        print("Shutting down")

start = input("1 - English\n2 - Русский\n")

if start == "1":
    triangle1()
elif start == "2":
    triangle2()
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы