#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")
Несколько проблем, которые я пытаюсь решить:
- Как добавить проверку в input / split, чтобы программа не зависала, если вводится что-либо, кроме двух значений, разделенных пробелами
- Связанный, как принять «exit» в качестве значения в поле ввода с разделением на месте
- Как вызвать сообщение об ошибке «Я не понимаю» ранее — прямо сейчас неожиданные значения, отличные от градуса Цельсия или Фаренгейта, возвращают программу на вход, но не показывают ошибку
Ответ №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
.