#python
Вопрос:
я новичок в python, и я пытался создать программу BMICalculator, и в настоящее время я сталкиваюсь с проблемой, когда вы открываете программу, она запрашивает у пользователя ввод их роста и веса, и я создал обработку исключений для попыток, когда пользователь пытается ввести строку в свой ввод роста/веса, но проблема в том, что когда пользователь правильно вводит свой рост, а затем использует строку для своего веса, мое исключение ValueError появляется, но заставляет пользователя снова вводить свой рост, что не удобно для пользователя, Так что я хочу сделать, но не знаю, как это сделать.: Чтобы снова попросить пользователя ввести вес, а не рост, так как он уже ввел этот Мой код:
import math
import time
def BMICalculator():
print("BMI Calculator!")
try:
Height = float(input("Enter your Height: "))
Weight = float(input("Enter your Weight: "))
Result = Weight / (Height / 100) ** 2
print("Your BMI is: ", round(Result, 1))
if Result <= 18.5:
print("You are underweight")
elif Result <= 24.9:
print("You are healthy")
elif Result <= 29.9:
print("You are overweight")
elif Result > 29.9:
print("You are obese")
except ValueError:
print("Please enter a valid number")
BMICalculator_NoWelcomingMessage()
def BMICalculator_NoWelcomingMessage():
try:
Height = float(input("Enter your Height: "))
Weight = float(input("Enter your Weight: "))
Result = Weight / (Height / 100) ** 2
print("Your BMI is: ", round(Result, 1))
if Result <= 18.5:
print("You are underweight")
elif Result <= 24.9:
print("You are healthy")
elif Result <= 29.9:
print("You are overweight")
elif Result > 29.9:
print("You are obese")
except ValueError:
print("Please enter a valid number")
BMICalculator_NoWelcomingMessage()
def enter_again():
user = input("Do you want to enter again?: ").lower()
while user not in ['yes', 'y', 'no', 'n']:
print("Please enter a valid input")
user = input("Do you want to enter again?: ").lower()
if user not in ['yes', 'y']:
print("Have a nice day!")
time.sleep(1)
elif user not in ['no','n']:
BMICalculator_NoWelcomingMessage()
enter_again()
BMICalculator()
enter_again()
Комментарии:
1. Вместо
BMICalculator_NoWelcomingMessage()
» Почему бы тебе не позвонитьBMICalculator()
?» Кроме того, имейте в виду максимальный предел рекурсии
Ответ №1:
Ну, причина, по которой это происходит, заключается в том, что у вас есть один оператор catch для обоих входных данных, и если какой-либо из них выдает ошибку, вы перезапускаете весь процесс.
Вы можете исправить это с помощью незначительной модификации, поместить два входа в отдельные блоки catch и использовать цикл true, чтобы продолжать запрашивать допустимый ввод, пока вы его не получите. Вот что я сказал в коде:
def BMICalculator():
print("BMI Calculator!")
while True:
try:
Height = float(input("Enter your Height: "))
break
except ValueError:
print("Please enter a valid number")
while True:
try:
Weight = float(input("Enter your Weight: "))
break
except ValueError:
print("Please enter a valid number")
Result = Weight / (Height / 100) ** 2
print("Your BMI is: ", round(Result, 1))
Примечание: Вы, вероятно, можете проанализировать входные данные в отдельной функции и вызвать эту функцию при вводе данных для веса и роста, что сделает код чище. Что-то вроде этого, возможно:
def parse_input(InputName):
while True:
try:
value = float(input(f"Enter your {InputName}: "))
break
except ValueError:
print("Please enter a valid number")
return value
def BMICalculator():
print("BMI Calculator!")
Height = parse_input("Height")
Weight = parse_input("Weight")
Result = Weight / (Height / 100) ** 2
print("Your BMI is: ", round(Result, 1))