← 파이썬 강의 목록으로
📊
실습 프로젝트 (Practice) · ★★
다인원 + 분류 + 정렬 표

Lv2 · BMI 추적기

여러 명의 키/몸무게를 입력 받아 BMI 계산, 분류, 정렬된 표로 출력. f-string 정렬과 분류별 집계까지 다룹니다.

dict정렬f-string
소요 시간
2~3시간
난이도
📊 자료구조 활용
선수 조건
🎯 기초 6, 9주차 + f-string 정렬
결과물
표 형식 출력과 집계

이 강의에서 배우는 것

  • 1BMI 공식: weight / (height/100) ** 2
  • 2구간별 분류 함수를 작성한다
  • 3f-string 정렬로 표를 만든다

프로젝트 개요

  • 이름 자리에 done 입력 시 입력 종료
  • 분류: 저체중(<18.5), 정상(18.5~23), 과체중(23~25), 비만(>=25)
  • BMI 내림차순 정렬 표 + 분류별 집계

도전 과제

  • 분류별 인원 집계
  • CSV 저장

채점 체크리스트

  • 입력 검증
  • 정렬 정확
  • 분류 함수

💻 예제 (examples)

실제로 실행해 결과를 확인할 수 있는 예제 코드입니다.

solution.py전체 동작 코드
CODE
"""BMI 추적기 — 다인원 + 정렬 표"""

def classify(bmi):
    if bmi < 18.5: return "저체중"
    if bmi < 23: return "정상"
    if bmi < 25: return "과체중"
    return "비만"

def main():
    people = []
    print("이름 자리에 'done' 입력 시 종료")
    while True:
        name = input("\n이름: ").strip()
        if name.lower() == "done": break
        try:
            h = float(input("키(cm): "))
            w = float(input("몸무게(kg): "))
        except ValueError:
            print("숫자만"); continue
        bmi = w / (h / 100) ** 2
        people.append({"name": name, "h": h, "w": w, "bmi": bmi})

    if not people:
        return

    people.sort(key=lambda p: -p["bmi"])
    print(f"\n{'이름':<10}{'키':>7}{'몸무게':>9}{'BMI':>9}  분류")
    for p in people:
        print(f"{p['name']:<10}{p['h']:>7.1f}{p['w']:>9.1f}{p['bmi']:>9.2f}  {classify(p['bmi'])}")

    avg = sum(p["bmi"] for p in people) / len(people)
    print(f"\n평균 BMI: {avg:.2f} ({classify(avg)})")

    counts = {}
    for p in people:
        c = classify(p["bmi"])
        counts[c] = counts.get(c, 0) + 1
    print("\n[분류별]")
    for c in ["저체중", "정상", "과체중", "비만"]:
        print(f"  {c}: {counts.get(c, 0)}명")

if __name__ == "__main__":
    main()
▶ 실행 결과
이름      키     몸무게      BMI  분류
홍길동     180.0   95.0    29.32  비만
Alice     165.0   55.0    20.20  정상

평균 BMI: 24.76 (과체중)

[분류별]
  저체중: 0명
  정상: 1명
  과체중: 0명
  비만: 1명

📝 과제 (exercises)

직접 풀어보고, 막힐 때 정답을 펼쳐 비교해보세요.

과제 1

프로젝트 구현

목표: 위 사양대로 직접 작성한다.

요구사항
  • classify 함수
  • people 정렬
  • f-string 정렬
💡 힌트

{val:>7.1f} 로 우측 정렬 1자리

입출력 예시
평균 BMI: 24.76 (과체중)
채점
  • · 분류 정확
  • · 정렬
정답 코드 펼치기 / 접기
SOLUTION
# 위 solution.py 와 동일
▶ 실행 결과
(예제 참고)
예제 코드 / 강의 자료

전체 강의 자료와 예제 코드는 GitHub에서 자유롭게 받아볼 수 있습니다.

GitHub에서 보기 ↗