Странно, что тема в подразделе C/C++, где мало специалистов по пайтон.
Одно знаю точно - в пайтоне важны отступы в виде табуляции. Если их нет или они используются неправильно - программа работать не станет.
Ваш код содержит несколько ошибок и некорректных участков, из-за которых он не работает как ожидается. Вот исправленный код:
```python
print("Здравствуйте"
a = "Нужное сопротивление для резистора - нажмите клавишу 1 (нужно хотя бы 3 значения)"
b = "Напряжение - нажмите клавишу 2 (нужно хотя бы 2 значения)"
c = "Сила тока - нажмите клавишу 3 (нужно хотя бы 2 значения)"
d = "Мощность - нажмите клавишу 4 (нужно хотя бы 2 значения)"
e = "Сопротивление - нажмите клавишу 5 (нужно хотя бы 2 значения)"
do = input("Что нужно определить?\nВарианты:\n" + a + "\n" + b + "\n" + c + "\n" + d + "\n" + e + "\n"
while int(do) <= 0 or int(do) > 5:
do = input("Неверный ввод! Что нужно определить?\nВарианты:\n" + a + "\n" + b + "\n" + c + "\n" + d + "\n" + e + "\n"
print("Все ок"
# Нужное сопротивление для резистора
if do == "1":
print("\nНет информации - пиши 0\n"
U = float(input("U (Напряжение) = ")
I = float(input("I (Сила тока) = ")
P = float(input("P (Мощность) = ")
R = float(input("R (Сопротивление в цепи) = ")
if R != 0 and P != 0 and U != 0:
I = U / R
Rc = U / I
print(Rc)
else:
print("Ошибка\nЧто-то пошло не так"
```
Исправления:
1. Помимо оператора "import math", других операторов не видно, поэтому я его убрал.
2. В выражении "while int(do) <= 5 > 0" некорректно использован оператор ">" - он необходимо заменить на "or".
3. Добавлена проверка на ввод пользователя в цикле while, чтобы он мог выбрать только числа от 1 до 5.
4. Вывод текста "Все ок" перенесен вне цикла while, чтобы программа дошла до этого места, только если ввод пользователя был корректным.
5. Добавлены отступы и исправлены названия переменных, чтобы код был более читабельным.
6. Добавлена проверка на значение переменной "do" для выполнения определенной части кода.
def calculate_resistor():
print("\nНет информации - введите 0.\n")
U = get_float_input("U (Напряжение) = ")
I = get_float_input("I (Сила тока) = ")
P = get_float_input("P (Мощность) = ")
R = get_float_input("R (Сопротивление в цепи) = ")
if R == 0 or P == 0 or U == 0:
print("Ошибка: Что-то пошло не так.")
else:
Rc = U / I
print(Rc)
def calculate_voltage():
print("\nНет информации - введите 0.\n")
U = get_float_input("U (Напряжение) = ")
I = get_float_input("I (Сила тока) = ")
if U == 0 or I == 0:
print("Ошибка: Что-то пошло не так.")
else:
R = U / I
print(R)
def calculate_current():
print("\nНет информации - введите 0.\n")
U = get_float_input("U (Напряжение) = ")
P = get_float_input("P (Мощность) = ")
if U == 0 or P == 0:
print("Ошибка: Что-то пошло не так.")
else:
I = P / U
print(I)
def calculate_power():
print("\nНет информации - введите 0.\n")
I = get_float_input("I (Сила тока) = ")
P = get_float_input("P (Мощность) = ")
if I == 0 or P == 0:
print("Ошибка: Что-то пошло не так.")
else:
U = P / I
print(U)
def calculate_resistance():
print("\nНет информации - введите 0.\n")
R = get_float_input("R (Сопротивление в цепи) = ")
I = get_float_input("I (Сила тока) = ")
if R == 0 or I == 0:
print("Ошибка: Что-то пошло не так.")
else:
P = R * I ** 2
print(P)
if __name__ == "__main__":
print("Здравствуйте")
options = [
"Нужное сопротивление для резистора (нажмите клавишу 1) (нужно хотя бы 3 значения)",
"Напряжение (нажмите клавишу 2) (нужно хотя бы 2 значения)",
"Сила тока (нажмите клавишу 3) (нужно хотя бы 2 значения)",
"Мощность (нажмите клавишу 4) (нужно хотя бы 2 значения)",
"Сопротивление (нажмите клавишу 5) (нужно хотя бы 2 значения)",
]
print("\n".join(options))
do = input("Что нужно определить?\nВарианты: 1, 2, 3, 4, 5: ")
while do not in ["1", "2", "3", "4", "5"]:
do = input("Пожалуйста, введите корректный вариант: ")
if do == "1":
calculate_resistor()
elif do == "2":
calculate_voltage()
elif do == "3":
calculate_current()
elif do == "4":
calculate_power()
elif do == "5":
calculate_resistance()
else:
print("Ошибка: Что-то пошло не так.")
Без отступов не очень ясно, что вообще должно происходить после строки
if do == "1"
Первое условие проверяет do == "1" и, видимо, при его истинности в U, I, P и R кладутся новые инпуты. А вот при do ≠ "1" начинается беда: как только выясняется, что do ≠ "1", проверяется следующий elif (потому что на вид if — elif — else это все ветвление одного и того же условия):
elif R != 0 and P != 0 and U != 0 :
Но вот беда: если первый if не выполнился, то U, I, P и R даже не объявлены, и поэтому этот elif физически нельзя проверить, что и написано в ошибке.
Если хочется внутри внешнего if’а проверить, не делим ли мы на нуль, то это лучше делать через вложенное условие (внутрь внешнего if’а, а не как его продолжение в виде elif), либо через стандартную конструкцию для отлова исключений try — except