Привет! Теперь, когда мы изучили переменные, типы данных, преобразование типов и условия, пора собрать всё вместе и создать настоящий проект.
В этой статье мы создадим калькулятор индекса массы тела (ИМТ) — полезную программу, которая поможет пользователю оценить свой вес.
- Что нужно знать перед началом
- Основная часть
- Что такое ИМТ и как его считать
- Интерпретация ИМТ
- Пошаговое создание программы
- Полный код (базовая версия)
- Улучшенная версия (с обработкой ошибок)
- Полный код (с рекомендациями)
- Задачи для закрепления
- Нюансы и подводные камни
- Неправильный ввод
- Отрицательные числа
- Неправильные единицы измерения
- Частые ошибки и как их избежать
- Ошибка 1: Забыл обработать ввод
- Ошибка 2: Не проверяешь границы
- Ошибка 3: Используешь = вместо ==
- Шпаргалка
- Заключение / Выводы
- КВИЗ
- Что дальше?
Что нужно знать перед началом
Для этого проекта тебе понадобится:
- Установленный Python
- Знание переменных, типов данных, преобразования типов, условий
Совет: Постарайся сначала написать программу самостоятельно, а потом сравни с моим решением.
Основная часть
Что такое ИМТ и как его считать
ИМТ (индекс массы тела) — это величина, которая позволяет оценить, соответствует ли масса человека его росту.
Формула расчёта:
ИМТ = вес / (рост * рост)Где:
- вес в килограммах
- рост в метрах
Интерпретация ИМТ
| ИМТ | Интерпретация |
|---|---|
| Меньше 18.5 | Дефицит массы тела |
| 18.5 — 24.9 | Норма |
| 25 — 29.9 | Избыточная масса тела |
| 30 и больше | Ожирение |
Совет: Это лишь приблизительные значения. Для точной оценки нужно учитывать возраст, пол, мышечную массу и другие факторы.
Пошаговое создание программы
Шаг 1. Запросить рост и вес
height = float(input("Введите ваш рост в метрах: "))
weight = float(input("Введите ваш вес в килограммах: "))Шаг 2. Рассчитать ИМТ
bmi = weight / (height * height)Шаг 3. Определить категорию
if bmi < 18.5:
category = "дефицит массы тела"
elif 18.5 <= bmi < 25:
category = "норма"
elif 25 <= bmi < 30:
category = "избыточная масса тела"
else:
category = "ожирение"Шаг 4. Вывести результат
print(f"Ваш ИМТ: {bmi:.2f}")
print(f"Категория: {category}")Полный код (базовая версия)
height = float(input("Введите ваш рост в метрах: "))
weight = float(input("Введите ваш вес в килограммах: "))
bmi = weight / (height * height)
if bmi < 18.5:
category = "дефицит массы тела"
elif 18.5 <= bmi < 25:
category = "норма"
elif 25 <= bmi < 30:
category = "избыточная масса тела"
else:
category = "ожирение"
print(f"Ваш ИМТ: {bmi:.2f}")
print(f"Категория: {category}")Улучшенная версия (с обработкой ошибок)
try:
height = float(input("Введите ваш рост в метрах: "))
weight = float(input("Введите ваш вес в килограммах: "))
if height <= 0 or weight <= 0:
print("Ошибка: рост и вес должны быть положительными числами.")
else:
bmi = weight / (height * height)
if bmi < 18.5:
category = "дефицит массы тела"
elif 18.5 <= bmi < 25:
category = "норма"
elif 25 <= bmi < 30:
category = "избыточная масса тела"
else:
category = "ожирение"
print(f"Ваш ИМТ: {bmi:.2f}")
print(f"Категория: {category}")
except ValueError:
print("Ошибка: введите числа, а не текст.")Полный код (с рекомендациями)
print("=" * 40)
print(" Калькулятор индекса массы тела (ИМТ)")
print("=" * 40)
try:
height = float(input("Введите ваш рост (в метрах): "))
weight = float(input("Введите ваш вес (в килограммах): "))
if height <= 0 or weight <= 0:
print("Ошибка: рост и вес должны быть положительными числами.")
else:
bmi = weight / (height * height)
if bmi < 18.5:
category = "дефицит массы тела"
advice = "Рекомендуется набрать вес. Обратитесь к врачу."
elif 18.5 <= bmi < 25:
category = "норма"
advice = "Отличный результат! Поддерживайте здоровый образ жизни."
elif 25 <= bmi < 30:
category = "избыточная масса тела"
advice = "Рекомендуется снизить вес. Сбалансируйте питание и добавьте физическую активность."
else:
category = "ожирение"
advice = "Рекомендуется обратиться к врачу и разработать план снижения веса."
print("=" * 40)
print(f"Ваш ИМТ: {bmi:.2f}")
print(f"Категория: {category}")
print(f"Рекомендация: {advice}")
print("=" * 40)
except ValueError:
print("Ошибка: введите числа, а не текст.")Задачи для закрепления
Задача 1. Запусти программу и проверь её работу с разными значениями. Используй код выше.
Задача 2. Добавь в программу проверку на то, что рост указан в метрах (не должен быть больше 3 метров).
Задача 3. Добавь в программу дополнительную категорию для ИМТ < 16.
Задача 4. Добавь возможность ввода роста в сантиметрах (программа должна переводить в метры).
Задача 5. Добавь цикл, чтобы программа не закрывалась после одного расчёта. Выведи сообщение благодарности за использование программы.
Ответы:
Задача 2
# Задача 2
if height <= 0 or height > 3:
print("Ошибка: рост должен быть от 0 до 3 метров.")Задача 3
if bmi < 16:
category = "выраженный дефицит массы тела"
elif 16 <= bmi < 18.5:
category = "дефицит массы тела"
elif 18.5 <= bmi < 25:
category = "норма"
elif 25 <= bmi < 30:
category = "избыточная масса тела"
else:
category = "ожирение"Задача 4
height_cm = float(input("Введите ваш рост в сантиметрах: "))
height = height_cm / 100Задача 5
while True:
height = float(input("Введите ваш рост в метрах: "))
weight = float(input("Введите ваш вес в килограммах: "))
# ... расчёт ...
again = input("Хотите рассчитать ещё раз? (да/нет): ")
if again.lower() != "да":
break
print("Спасибо за использование калькулятора!")Нюансы и подводные камни
Неправильный ввод
Если пользователь введёт буквы вместо чисел — программа упадёт с ValueError. Мы обработали это с помощью try-except.
Отрицательные числа
Рост и вес не могут быть отрицательными. Мы добавили проверку height <= 0 or weight <= 0.
Неправильные единицы измерения
Пользователь может ввести рост в сантиметрах вместо метров. Можно добавить подсказку или автоматическое преобразование.
Частые ошибки и как их избежать
Ошибка 1: Забыл обработать ввод
Всегда используй try-except при работе с числами от пользователя.
Ошибка 2: Не проверяешь границы
Проверяй, что значения имеют смысл (рост > 0, вес > 0).
Ошибка 3: Используешь = вместо ==
В условиях всегда ==, а не =.
Шпаргалка
| Что нужно | Как пишется |
|---|---|
| Запросить рост | height = float(input("...")) |
| Запросить вес | weight = float(input("...")) |
| Рассчитать ИМТ | bmi = weight / (height * height) |
| Проверить на ноль | if height <= 0 or weight <= 0: |
| Вывести с двумя знаками | f"{bmi:.2f}" |
| Обработать ошибку | try: … except ValueError: |
Заключение / Выводы
Сегодня мы:
- Создали полноценный проект на Python
- Научились рассчитывать ИМТ
- Добавили обработку ошибок
- Разобрали интерпретацию результата








