import math
print("Здравствуйте")
a = "Нужное сопротивление для резистора нажмите клавишу 1 (нужно хотябы 3 значения) \n "
b = "Напряжение (нужно хотя бы 2 значения) нажмите клавишу 2 \n "
c = "Сила Тока (нужно хотя бы 2 значения) нажмите клавишу 3 \n "
d = "Мощность (нужно хотя бы 2 значения) нажмите клавишу 4 \n "
e = "Сопротивление (нужно хотя бы 2 значения) нажмите клавишу 5 \n "
f = "\n"
do = input(" Что нужно определить? \n Варианты: \n" + a + b + c + d + e )
while int(do) <= 5 > 0 :
pass
print("все ок")
#Нужное сопротивление для резистора
if do == "1" :
print("\n нет информации - пиши 0 \n")
U = float(input(" U (Напряжение) = "))
I = float(input(" I (Сила Тока) = "))
P = float(input(" P (Мощность) = "))
R = float(input(" R (Сопротивление в цепи) = "))
elif R != 0 and P != 0 and U != 0 :
I = U / R
Rc = U / I
print(Rc)
else:
print("Ошибка \n Что-то пошло не так"
программа написана не полностью.
Если в переменную do поместить что-то кроме 1, программа выдаст ошибку, хотя должен срабатывать else :
Traceback (most recent call last):
File "E:\python\жопа_улитки.py", line 29, in <module>
elif R != 0 and P != 0 and U != 0 :
^
NameError: name 'R' is not defined
Цикл while должен был ограничить выбор чисел от 1 до 5 но почему то игрнорируется
Другие языки программирования и технологии
Написал небольшую программу, не могу понять почему не работает цикл while и оператор else
Странно, что тема в подразделе C/C++, где мало специалистов по пайтон.
Одно знаю точно - в пайтоне важны отступы в виде табуляции. Если их нет или они используются неправильно - программа работать не станет.
Одно знаю точно - в пайтоне важны отступы в виде табуляции. Если их нет или они используются неправильно - программа работать не станет.
Вячеслав Плотников
Добавлю ещё, что сомнение в этой строчке:
def get_float_input(prompt):
while True:
try:
return float(input(prompt))
except ValueError:
print("Ошибка: Введите число.")
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("Ошибка: Что-то пошло не так.")
Это совсем не С++
По питону помогут в теме с питоном (если есть кому).
По питону помогут в теме с питоном (если есть кому).
Ваш код содержит несколько ошибок. Во-первых, вы используете ключевое слово do, которое является зарезервированным словом в Python и не может использоваться в качестве имени переменной. Вам следует заменить его на другое имя переменной.
Во-вторых, ваш цикл while никогда не будет выполняться, потому что условие int(do) <= 5 > 0 всегда ложно. Вместо этого вы можете использовать условие 0 < int(do) <= 5.
В-третьих, у вас есть проблема с отступами в вашем коде. Оператор elif должен быть на том же уровне отступа, что и соответствующий ему оператор if. Также у вас есть лишний отступ перед оператором pass внутри цикла while.
Наконец, вы получаете ошибку NameError: name 'R' is not defined, потому что переменная R определена только внутри блока if do == "1", но вы пытаетесь использовать ее вне этого блока. Чтобы исправить эту ошибку, вы можете определить переменную R до начала условного оператора if.
Во-вторых, ваш цикл while никогда не будет выполняться, потому что условие int(do) <= 5 > 0 всегда ложно. Вместо этого вы можете использовать условие 0 < int(do) <= 5.
В-третьих, у вас есть проблема с отступами в вашем коде. Оператор elif должен быть на том же уровне отступа, что и соответствующий ему оператор if. Также у вас есть лишний отступ перед оператором pass внутри цикла while.
Наконец, вы получаете ошибку NameError: name 'R' is not defined, потому что переменная R определена только внутри блока if do == "1", но вы пытаетесь использовать ее вне этого блока. Чтобы исправить эту ошибку, вы можете определить переменную R до начала условного оператора if.
Без отступов не очень ясно, что вообще должно происходить после строки
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
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
Ваш код содержит несколько ошибок и некорректных участков, из-за которых он не работает как ожидается. Вот исправленный код:
```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" для выполнения определенной части кода.
Теперь ваш код должен работать корректно.
```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" для выполнения определенной части кода.
Теперь ваш код должен работать корректно.
Похожие вопросы
- здравствуйте ,не давно начал изучать "язык програмиста" работаю в турбо паскале , не могу понят почему программа
- Помогите написать небольшую программу на ассемблере (TASM). Подробности внутри.
- Помогите написать правильно программу в С, мой вариант не работает
- Задание_Кто соображает в программировании на паскале? Надо написать небольшую программу, а я в предмете плохо понимаю))
- Помогите написать небольшую программу на TurboPascal.
- Ребят, не могу понять неделю что такое цикл for вообще не дорубаюсь, учебники не помогают
- Не могу понять каким образом работает return в рекурсивной функции?
- Здравствуйте. Никак не могу понять как нужно работать в Visual C++ 2010. Я только начинающий. Делаю следующее. Создаю
- Помогите найти ошибку. Программа не работает. Пишет ELSE без IF. Не могу понять в чем дело.
- Рекурсия поиск на Delphi в цикле WHILE - исправьте код ?