Срабатывают две ветки сразу (Python)

Рейтинг: 0Ответов: 2Опубликовано: 22.03.2023

Написал множество веток, на что и одна срабатывает, и другая. Допустим: написал площадь квадрата, а он мне выдает про площадь прямоугольника (код не доделал, мучаюсь долго с проблемой)

print("Введите раздел")
rasdel = input()
if rasdel == "Геометрия" or "геометрия":
print("Напишите, что вас интересует")
geometry_type = input()
if geometry_type == "Средняя линия треугольника":
    print("Введи основание треугольника")
    osnovaniye_treugolnika = int(input())
    result = osnovaniye_treugolnika / 2
    print("Ответ: ", result)
elif geometry_type == "Средняя линия трапеции":
    print("Введи основания трапеции (сначала меньшую длину)")
    osnovaniye_trapezii = int(input())
    osnovaniye_trapezii2 = int(input())
    result = (osnovaniye_trapezii + osnovaniye_trapezii2) / 2
    print("Ответ: ", result)
elif geometry_type == "Площадь параллелограмма" or "площадь параллелограмма":
    print("С косинусом? Ответ да или нет")
    otvet = input()
    if otvet == "Нет" or "нет":
        print("Вводи основание и высоту")
        a = int(input())
        h = int(input())
        result = a * h
        print(result)

elif geometry_type == "Площадь квадрата" or "площадь квадрата":
    print("Введите сторону")
    a = int(input())
    a *= a
    print(a)
elif geometry_type == "Площадь прямоугольника" or "площадь прямоугольника":
    type = 5
elif geometry_type == "Площадь ромба" or "площадь ромба":
    type = 6
elif geometry_type == "Площадь трапеции" or "площадь ромба":
    type = 7
elif geometry_type == "Теорема Пифагора" or "теорема пифагора" or "пифагор":
    type = 8
elif geometry_type == "Таблица":
    type = 9
elif geometry_type == "Основное тригонометрическое тоджество" or "тоджество":
    type = 10
elif geometry_type == "Длина окружности" or "длина окружности":
    type = 11
elif geometry_type == "Площадь круга":
    type = 12

Ответы

▲ 2
if rasdel == "Геометрия" or "геометрия":

Условие в данном случае написано с ошибкой

В вашем случае у условия должна быть левая и правая часть, а между ними должен быть знак

**if rasdel** == "Геометрия" - Тут всё верно

or "геометрия": - А тут проблемы  

Проблемы потому что у условия нет левой части и код не знает, чему должно быть равно это слово.
Т.к. для Python любая непустая строка - это истина - данное условие будет срабатывать всегда.

Один из правильных вариантов:

if rasdel == "Геометрия" or rasdel == "геометрия":

P.S. Тут тоже проблема, поправьте самостоятельно)

elif geometry_type == "Основное тригонометрическое тоджество" or "тоджество":

P.P.S Не забывайте про отступы. Таким образом вы показываете, какие строчки кода выполняются, если условие срабатывает

Неправильно::

if rasdel == "Геометрия" or "геометрия":
print("Напишите, что вас интересует")
geometry_type = input()

Правильно::

if rasdel == "Геометрия" or rasdel == "геометрия":
    print("Напишите, что вас интересует")
    geometry_type = input()

P.P.P.S)

Чтобы каждый раз не проверять комбинации с регистром, можно строку, которую ввёл пользователь, привести к нижнему/верхнему регистру с помощью методов .lower() или .upper()

print("Введите раздел")
rasdel = input().lower() # Теперь все буквы в нижнем регистре
if rasdel == "геометрия": # Можно сравнивать только с одной строкой, которая состоит из маленьких букв 
▲ 1

Вот это вот работать как вы задумали не будет:

if rasdel == "Геометрия" or "геометрия"

Стоит писать:

if rasdel == "Геометрия" or rasdel == "геометрия"

или

if rasdel in ("Геометрия", "геометрия")

но самый правильный:

if rasdel.lower() == "геометрия"