Помощь в обработке ошибок, запрошенная в преобразователе температуры Python

#python #python-3.x #split

#python #python-3.x #разделение

Вопрос:

Я студент-программист, работаю над заданием Python для разработки приложения, которое может преобразовывать градусы Цельсия в градусы Фаренгейта или наоборот. Мой текущий код работает, когда он получает ожидаемые значения, но сталкивается с некоторыми проблемами, когда входные данные не соответствуют ожидаемому формату:

 temp = "" #set initial value for temp variable
celsfahr = "" #set initial value for Celsius or Fahrenheit
 
while temp != "exit":
    temp, celsfahr = input("Enter a temperature in Celsius or Fahrenheit (examples: 32 Celsius, 500 Fahrenheit, -10 Celsius:) ").split()
    if temp.isnumeric():
        temp = int(temp)
        if celsfahr == "Fahrenheit":
            print(temp, "Fahrenheit equals", ((temp-32)*.556), "Celsius.")
        else:
            if celsfahr == "Celsius":
                print(temp, "Celsius equals", ((temp*1.8) 32), "Fahrenheit.")
    else:
        if temp.lower() == "exit":
            temp = temp.lower()
            print("Goodbye.")
        else:
            print("I don't understand. Try again.n")
 

Несколько проблем, которые я пытаюсь решить:

  1. Как добавить проверку в input / split, чтобы программа не зависала, если вводится что-либо, кроме двух значений, разделенных пробелами
  2. Связанный, как принять «exit» в качестве значения в поле ввода с разделением на месте
  3. Как вызвать сообщение об ошибке «Я не понимаю» ранее — прямо сейчас неожиданные значения, отличные от градуса Цельсия или Фаренгейта, возвращают программу на вход, но не показывают ошибку

Ответ №1:

Вы слишком рано разделяетесь, и это вас огорчает. Вместо этого используйте следующий подход. Вы убедитесь, что ваш ввод при разделении содержит 2 значения точно для преобразования или 1 или сообщения о выходе.

 userInput = ""
while userInput != "exit":
    userInput = input("Enter a temperature in Celsius or Fahrenheit (examples: 32 Celsius, 500 Fahrenheit, -10 Celsius:) ")
    data = userInput.split();
    if len(data)==2:
        temp = data[0]
        unit = data[1]
        if temp.isnumeric():
            temp = int(temp)
            if unit.title() == "Fahrenheit":
                print(temp, "Fahrenheit equals", ((temp-32)*5/9), "Celsius.")
            elif unit.title() == "Celsius":
                print(temp, "Celsius equals", ((temp*9/5) 32), "Fahrenheit.")
    elif len(data)==1:
        userInput = data[0].lower()
        if userInput == "exit":
            print("Goodbye.")
        else:
            print("I don't understand. Try again.n")
 

Я также исправил пару вещей для вас. Я использовал фактическую дробь для математики (5/9), а не число, которое у вас там было. Так будет точнее. Я также переименовал вашу единичную переменную именно в это, unit .