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로 만든 실행 파일)
[실행 결과]

블로그 인기글
폐업 신고 절차와 부가가치세 신고하는 방법
폐업 신고 시 세무서 안 가고 온라인으로 신고하는 방법인 '국세청 홈택스를 이용하여 폐업 신고하는 절차와 폐업 후 해야 하는 부가가치세 신고, 인건비 저리, 종합소득세 신고 등에 대해 포스팅합니다. 폐업 신고 시 홈택스 이용하는 방법과 부가가치세 등 신고 절차 여러가지 사유로 폐업을 해야 할 때, 예전에는 세무서를 방문해야 했지만 국세청 홈택스가 생긴 이후에는 사업자 등록이나 폐업 등을 인터넷으로 할 수가 있게 되었습니다. 특히, 코로나 시국인 요즘은 더더욱 온라인 신청 업무가 더 활성화되었죠. 폐업을 한다는 것 자체가 우울한 일인데, 발품을 파는 것보다는 커피 한잔 하면서 인터넷으로 간단하게 처리하는 게 좋을 듯하여 그 절차를 올려봅니다. 폐업은 폐업 신고와 함께 폐업 후 절차까지 모두 마쳐야 불이익이..
goodthings4me.tistory.com
엑셀 시트 분리 저장 - 엑셀 파일의 시트를 분리하여 저장하기
엑셀을 사용하다 보면 엑셀 시트를 분리해서 저장해야 할 때가 있다. 최근에도 이런 경우가 발생하여 구글링 후 엑셀 시트 분리 업무를 수행하고 내친김에 다른 사람들도 사용할 수 있도록 파이썬 tkinter로 프로그램으로 만들어 보았다. Excel Sheets 분리 저장하는 프로그램(with 파이썬 Tkinter) ※ 프로그램 다운로드(네이버 MYBOX에서 공유) : ExcelSeparateSheets.zip ▶ 프래그램을 실행하면 다음과 같이 초기 화면이 보인다. 찾아보기 : 엑셀 파일이 있는 폴더를 선택한다. (프로그램이 있는 최상위 디렉터리가 열린다) 실행하기 : 프로그램 실행 버튼 상태 변경 순서 : 실행전 → 실행 중 → Sheet "OOO" 분리 저장 중 → 실행 완료 실행 결과 확인 : 엑셀 파..
goodthings4me.tistory.com
Windows 10 탐색기 느려지는 증상과 해결하는 방법
잘 작동하던 Windows 10 탐색기가 갑자기 느려지는 증상이 발생했을 때 어떻게 조치를 하는지 구글에서 찾아보니 많은 해결책들이 있었으나 어떤 것이 정확한 해결책인지는 알 수가 없었다. 그래서 해결방법이라고 제시한 것들을 정리해 보았다. 윈도우 탐색기가 느려지는 증상 해결 방법 어느 순간부터 응용프로그램(VS Code 등)에서 폴더 열기나 파일 불러오기를 했을 때 검색 팝업창이 안 뜨거나 열리는 시간이 엄청 느려지는 증상과, 더불어서 탐색기도 실행이 많이 느려지는 증상이 있었다. 기존에 사용하던 VS Code에 openpyxl 설치 후 실행이 느려지는 증상이 발생하더니 윈도우10 탐색기도 느려져서 사용할 수가 없었다. 노트북에 OS(Windows10)를 설치한지 1년이 다 되어가긴 했지만, 1개월 전..
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 |
댓글