📊
실습 프로젝트 (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 와 동일▶ 실행 결과
(예제 참고)