goodthings4me.tistory.com
BMI (body mass index)는 체질량 지수 즉, 사람의 비만도를 나타내는 지수이며, 체중과 키의 관계로 자신의 몸무게(kg)를 키의 제곱(m)으로 나눈 값이다. 파이썬으로 한국인의 체질량 지수 계산 프로그램을 구현해보자.
한국인의 체질량 지수(BMI) 계산 프로그램 구현
BMI 기준
대한비만학회는 한국인의 체질량 지수를 다음과 같은 수치 구간별로 나눈다.
- 고도 비만 : 35 이상
- 중(重)도 비만 (2단계 비만) : 30 - 34.9
- 경도 비만 (1단계 비만) : 25 - 29.9
- 과체중 : 23 - 24.9
- 정상 : 18.5 - 22.9
- 저체중 : 18.5 미만
※ BMI 계산하기 2가지 소스 코드 공유
1. 파이썬 소스 코드
2. 파이썬 GUI(Tkinter) 소스 코드
[파이썬 소스 코드]
## BMI(body mass index) 체질량 지수 구하기
def bmi():
name = input('\n이름을 입력하시오(종료:"0")>> ')
while True:
try:
height = float(input('\n키(cm)를 입력하시오(종료:"0")>> '))
except:
print('숫자(정수 또는 실수)를 입력하세요!')
continue
if height < 0 or height > 250:
print('키 입력 범위가 아닙니다!')
continue
if not height:
print('\n프로그램을 종료합니다.')
return False
break
while True:
try:
weight = float(input('\n몸무게(kg)를 입력하시오(종료:"0")>> '))
except:
print('숫자(정수 또는 실수)를 입력하세요!')
continue
if weight < 0 or weight > 300:
print('몸무게 입력 범위가 아닙니다!')
continue
if not weight:
print('\n프로그램을 종료합니다.')
return False
break
if name and height and weight:
bmi = weight/((height/100) * (height/100))
# print(bmi)
print(f'\n{"=" * 10} BMI 지수 {"=" * 10}\n')
if bmi >= 35.0:
print(f'{name} 님의 BMI 지수는 {bmi:.1f}, 고도 비만 단계입니다.')
elif 30.0 <= bmi < 34.9:
print(f'{name} 님의 BMI 지수는 {bmi:.1f}, 중(重)도 비만(2단계 비만) 단계입니다.')
elif 25.0 <= bmi < 29.9:
print(f'{name} 님의 BMI 지수는 {bmi:.1f}, 경도 비만(1단계 비만) 단계입니다.')
elif 23.0 <= bmi < 24.9:
print(f'{name} 님의 BMI 지수는 {bmi:.1f}, 과체중 단계입니다.')
elif 18.5 <= bmi < 22.9:
print(f'{name} 님의 BMI 지수는 {bmi:.1f}, 정상 체중 단계입니다.')
elif bmi < 18.5:
print(f'{name} 님의 BMI 지수는 {bmi:.1f}, 저체중 단계입니다.')
else:
return False
bmi()
- BMI 계산에 필요한 키와 몸무게를 각각 입력받을 때 실수로 잘 못 입력했더라도 처음부터 모든 데이터를 입력받지 않고 그 항목만을 다시 입력받기 위해서 while문을 2개로 구분했다.
- 또한 정수나 실수가 아닌 문자나 특수문자 등 입력을 방지하기 위해 예외처리(try ~ except)를 했고, "0"을 입력하면 프로그램을 종료시킨다.
- 그리고, 몸무게나 키의 경우 0 미만 값이나 사람의 몸무게, 키를 벗어난 수치(몸무게는 300kg 초과, 키는 250cm 초과)일 경우 다시 입력해야 한다.
- BMI, 체질량지수는 자신의 몸무게(kg)를 키의 제곱(m)으로 나눈 값이기 때문에 키의 경우 cm로 입력받고, 계산식에서는 100으로 나눈값을 적용했다.
- 계산식과 BMI 결과 출력 시 if 문으로 구현하고 수치는 소수점 첫째 자리까지 표시한다.
[실행 결과]
이름을 입력하시오(종료:"0")>> 홍길동
키(cm)를 입력하시오(종료:"0")>> 180.5
몸무게(kg)를 입력하시오(종료:"0")>> 77.2
========== BMI 지수 ==========
홍길동 님의 BMI 지수는 23.7, 과체중 단계입니다.
[파이썬 GUI(Tkinter) 소스코드]
from tkinter import *
from tkinter import messagebox
root = Tk()
root.title('BMI 계산하기')
root.geometry('450x430+500+100')
root.resizable(False, False)
root.option_add('*Font','맑은고딕 12')
def bmi(height, weight):
result = ''
bmi = weight/((height/100) * (height/100))
# print(bmi)
print(f'\n{"=" * 10} BMI 지수 {"=" * 10}\n')
if bmi >= 35.0:
print(f'당신의 BMI 지수는 {bmi:.1f}, 고도 비만 단계입니다.')
result = f'당신의 BMI 지수는 {bmi:.1f}, 고도 비만 단계입니다.'
elif 30.0 <= bmi < 34.9:
print(f'당신의 BMI 지수는 {bmi:.1f}, 중(重)도 비만(2단계 비만) 단계입니다.')
result = f'당신의 BMI 지수는 {bmi:.1f}, 중(重)도 비만(2단계 비만) 단계입니다.'
elif 25.0 <= bmi < 29.9:
print(f'당신의 BMI 지수는 {bmi:.1f}, 경도 비만(1단계 비만) 단계입니다.')
result = f'당신의 BMI 지수는 {bmi:.1f}, 경도 비만(1단계 비만) 단계입니다.'
elif 23.0 <= bmi < 24.9:
print(f'당신의 BMI 지수는 {bmi:.1f}, 과체중 단계입니다.')
result = f'당신의 BMI 지수는 {bmi:.1f}, 과체중 단계입니다.'
elif 18.5 <= bmi < 22.9:
print(f'당신의 BMI 지수는 {bmi:.1f}, 정상 체중 단계입니다.')
result = f'당신의 BMI 지수는 {bmi:.1f}, 정상 체중 단계입니다.'
elif bmi < 18.5:
print(f'당신의 BMI 지수는 {bmi:.1f}, 저체중 단계입니다.')
result = f'당신의 BMI 지수는 {bmi:.1f}, 저체중 단계입니다.'
return result
def start():
height = height_entry1.get().strip()
weight = weight_entry1.get().strip()
try:
height = float(height)
weight = float(weight)
if height <= 0 or height > 250:
print('키 입력 범위가 아닙니다!')
messagebox.showinfo(title='키', message='키 입력 범위가 아닙니다!')
return False
if weight <= 0 or weight > 300:
print('몸무게 입력 범위가 아닙니다!')
messagebox.showinfo(title='몸무게', message='몸무게 입력 범위가 아닙니다!')
return False
except:
print('키와 몸무게는 숫자를 입력하세요!')
messagebox.showinfo(title='키/몸무게', message='키와 몸무게는 숫자(양수)를 입력하세요!')
return False
result = bmi(height, weight)
result_lbl2.config(text=result)
def set_default():
height_entry1.delete(0, END)
weight_entry1.delete(0, END)
result_lbl2.config(text='')
## 타이틀
title_lbl = Label(root, text='한국인의 체질량 지수(BMI) 계산하기', font=('맑은고딕', 17, 'bold'))
title_lbl.grid(row=1, column=0, columnspan=4, pady=20)
## 입력 프레임
bmi_lbl_frame = LabelFrame(root, text='데이터 입력')
bmi_lbl_frame.grid(row=2, column=0, columnspan=4, padx=17)
## 키
height_lbl1 = Label(bmi_lbl_frame, text='키(cm):', width=6, font=('맑은고딕', 13))
height_lbl1.grid(row=3, column=0, padx=10, pady=10)
height_entry1 = Entry(bmi_lbl_frame, width=10, bg='powderblue', fg='red')
height_entry1.grid(row=3, column=1, pady=10, sticky='w', padx=12, ipady=3)
## 몸무게
weight_lbl1 = Label(bmi_lbl_frame, text='몸무게(kg):', width=10, font=('맑은고딕', 13))
weight_lbl1.grid(row=3, column=2, padx=10, pady=10)
weight_entry1 = Entry(bmi_lbl_frame, width=10, bg='powderblue', fg='red')
weight_entry1.grid(row=3, column=3, pady=10, sticky='w', padx=12, ipady=3)
## 버튼
btn_frame1 = Frame(bmi_lbl_frame)
btn_frame1.grid(row=4, column=0, columnspan=4, padx=10)
btn_save1 = Button(btn_frame1, text='계산하기', width=10, font=('명조', 11), bg='lightblue', command=start)
btn_save1.grid(row=4, column=0, pady=20, padx=5)
btn_set_default = Button(btn_frame1, text='입력초기화', width=10, font=('명조', 11), bg='lightblue', command=set_default)
btn_set_default.grid(row=4, column=1, pady=20, padx=5)
######### BMI 결과 ##########
## 결과 프레임
result_lbl_frame = LabelFrame(root, text='BMI 결과')
result_lbl_frame.grid(row=6, column=0, columnspan=4, pady=20, padx=17)
## 결과
result_lbl2 = Label(result_lbl_frame, text='', width=38, height=3, font=('맑은고딕', 13, 'bold'), fg='blue', wraplength=250) # wraplength 줄바꿈 처리
result_lbl2.grid(row=6, column=0, padx=10, pady=5)
root.mainloop()
- 파이썬 GUI 모듈 Tkinter를 활용하여 만든 프로그램
▷ 아래 이미지 관련 프로그램 다운로드(pyinstaller로 만든 실행 파일)
[실행 결과]

블로그 인기글
Windows 10 탐색기 느려지는 증상과 해결하는 방법
잘 작동하던 Windows 10 탐색기가 갑자기 느려지는 증상이 발생했을 때 어떻게 조치를 하는지 구글에서 찾아보니 많은 해결책들이 있었으나 어떤 것이 정확한 해결책인지는 알 수가 없었다. 그래서 해결방법이라고 제시한 것들을 정리해 보았다. 윈도우 탐색기가 느려지는 증상 해결 방법 어느 순간부터 응용프로그램(VS Code 등)에서 폴더 열기나 파일 불러오기를 했을 때 검색 팝업창이 안 뜨거나 열리는 시간이 엄청 느려지는 증상과, 더불어서 탐색기도 실행이 많이 느려지는 증상이 있었다. 기존에 사용하던 VS Code에 openpyxl 설치 후 실행이 느려지는 증상이 발생하더니 윈도우10 탐색기도 느려져서 사용할 수가 없었다. 노트북에 OS(Windows10)를 설치한지 1년이 다 되어가긴 했지만, 1개월 전..
goodthings4me.tistory.com
[엑셀] 근무연수 및 근무 개월수 계산하는 함수
직장을 다니다 보면 몇 년 몇 개월 또는 전체 며칠을 다니고 있는지 궁금할 때가 있다. 아니면, 총무나 인사 일을 할 때 직원들의 근속연수 또는 근속개월수 등을 계산하고 싶을 때도 있다. 이런 경우 엑셀 함수를 활용하면 어떨까!! 근무연수 및 근무 개월수 계산 함수 알아보기 엑셀에서 근무연수 또는 근무 개월수 계산하는 것은 datedif() 함수를 사용하면 간단하게 해결할 수 있다. 아래 이미지를 보면서 설명하면, 셀 E1에 기준일자를 입력하고, 근무연수를 구할 때는 =datedif(B3,$E$1,"Y")&"년" 을 입력한다. 근무개월수는 =datedif(B3,$E$1,"M")&"개월" 처럼 입력한다. 일수까지 파악할 때문 별로 없지만, 심심풀이로 구해보고 싶을 때 =datedif(B3,$E$1,"D")..
goodthings4me.tistory.com
유튜브 영상 등의 URL 주소를 QR코드로 만들기
네이버 QR코드, makeQR, MUST QRcode, 무료 온라인 QRCode 생성기 등의 웹사이트에서 유튜브 영상 등의 URL을 입력하여 QR코드를 만들 수 있다. QR코드를 생성할 수 있는 사이트와 프로그램 URL 주소를 붙여넣기 한 후 "QR 코드 생성" 버튼을 클릭하면 큐알코드가 이미지로 생성되고, 다운로드도 할 수 있는 사이트 https://truedoum.com/useful/qrcode/ # 유튜브에서 동영상 URL을 복사하는 방법 유튜브에서 QR코드를 만들 동영상을 검색한다. 해당 동영상을 클릭한다. 동영상 위에서 마우스 우클릭 후 나오는 팝업창에서 “동영상 URL 복사”를 클릭하거나 영상 하단의 “공유”를 클릭하여 나온 창에서 URL를 복사한다. 아래의 웹사이트 중 하나를 선택한 후 복사..
goodthings4me.tistory.com
'코딩 연습 > 파이썬 기초(예제)' 카테고리의 다른 글
진수 변환 - 2진수 변환, 8진수 변환, 16진수 변환 [파이썬기초예제] (0) | 2022.04.23 |
---|---|
가위바위보 게임 [파이썬기초예제] (0) | 2022.04.21 |
북마크 관리 프로그램 코딩, 엑셀 생성 관리 [파이썬기초(예제)] (0) | 2022.04.17 |
파이썬 반복문 - 김밥 주문 계산하기 [파이썬기초(예제)] (0) | 2022.04.15 |
[파이썬기초(예제)] 회원가입 아이디 및 비밀번호 생성, 유효성 체크 기능 (0) | 2022.04.15 |
댓글