Python: как объединить несколько операторов if else

#python #if-statement

#python #if-оператор

Вопрос:

привет, я новичок в программировании, и я застрял в этом упражнении. это код для проверки, является ли вода жидкой, твердой или газообразной при заданной температуре на уровне моря. пользователю предлагается ввести, хотят ли они ввести температуру по Цельсию или Фаренгейту.

когда пользователь вводит F и температуру, отображается правильный текст, но также отображается «Ошибка.Введите допустимую единицу измерения.» в конце. Но когда пользователь вводит C, этого не происходит. Похоже, что после выполнения блока пользовательского ввода «F» он также выполняет пользовательский ввод «C» впоследствии, чтобы перейти к блоку else.

Как мне сделать так, чтобы он выполнял только блок пользовательского ввода «F», а затем выходил

Я знаю, это может показаться расплывчатым, извините, я новичок в программировании

вот мой код:

 temp_unit = input("Enter a temp unit (c or f): ")

#user input F
if temp_unit == "F" or temp_unit == "f":
    temp = float(input("Enter a temp in F: "))

    if temp <= 62.6 and temp > 28.4 and temp < 212:
        print("Water is liquid.")

    elif temp <= 28.4:
        print("Water is solid.")

    elif temp >= 212:
        print("Water is gaseous.")

#user input C
if temp_unit == "C" or temp_unit == "c":
    temp = float(input("Enter a temp in C: "))

    if temp <= 17 and temp > -2 and temp < 100:
        print("Water is liquid.")

    elif temp <= -2:
        print("Water is solid.")

    elif temp >= 100:
        print("Water is gaseous.")

#error
else:
    print("Error. Enter valid unit.")
  

Вот пользовательский ввод «F» выполняемого кода

Вот пользовательский ввод «C» выполняемого кода

Комментарии:

1. temp <= 62.6 and temp > 28.4 and temp < 212 какой смысл проверять 3 температурные точки?

Ответ №1:

Второе if должно быть elseif связано с первым if утверждением

Исправление кода:

 temp_unit = input("Enter a temp unit (c or f): ").lower()

if temp_unit == "f":
    temp = float(input("Enter a temp in F: "))
    if temp <= 28.4:
        print("Water is solid.")
    elif 28.4 < temp <= 212:
        print("Water is liquid.")
    else:
        print("Water is gaseous.")
elif temp_unit == "c":
    temp = float(input("Enter a temp in C: "))
    if temp <= 0
        print("Water is solid.")
    elif 0 < temp <= 100:
        print("Water is liquid.")
    else:
        print("Water is gaseous.")
else:
    print("Error. Enter valid unit.")
  

Комментарии:

1. @Knouki пожалуйста, попробуйте еще раз этот код, исправлены внутренние условия 🙂

Ответ №2:

Это из-за второго оператора ‘if’. Используя ‘if’, вы заставляете python выполнять второе условие. Вместо этого вы должны использовать ‘elif’. В этом случае, когда первый оператор ‘if’ имеет значение true, python не перейдет в оператор elif.

Смотрите код ниже:

 temp_unit = input("Enter a temp unit (c or f): ")

if temp_unit == "F" or temp_unit == "f":
    temp = float(input("Enter a temp in F: "))

    if temp <= 62.6 and temp > 28.4 and temp < 212:
        print("Water is liquid.")

    elif temp <= 28.4:
        print("Water is solid.")

    elif temp >= 212:
        print("Water is gaseous.")


elif temp_unit == "C" or temp_unit == "c":
    temp = float(input("Enter a temp in C: "))

    if temp <= 17 and temp > -2 and temp < 100:
        print("Water is liquid.")

    elif temp <= -2:
        print("Water is solid.")

    elif temp >= 100:
        print("Water is gaseous.")

else:
    print("Error. Enter valid unit.")
  

Ответ №3:

Для этого вам нужны только две температуры. Один между твердым и жидким, а другой между жидким и газообразным.

 temps = {
    "F": [212, 28.4],
    "C": [100, 0],
}

temp_unit = input("Enter a temp unit (c or f): ").strip().upper()

if temp_unit in temps:
    temp = float(input(f"Enter a temp in {temp_unit}: "))
    if temp > temps[temp_unit][0]:
        print("Water is gaseous.")
    elif temp > temps[temp_unit][1]:
        print("Water is liquid.")
    else:
        print("Water is solid.")
else:
    print("Enter valid temp unit.")
  

Комментарии:

1. О, спасибо за это! Я только что начал программировать и еще не дошел до части с массивами. Я хотел бы уточнить, что означает 0 в if temp > temps[temp_unit][0]:?

2. @Knouki Это означает, что «если temp больше первого значения в temps (для данного блока)» . Индексы списка начинаются с 0 . Таким образом, я могу повторно использовать if структуру для обоих модулей.