과제 그대로 복붙해서, 지피티에게 파이썬 코드를 짜달라고 했습니다.
처음에 짜 준 코드에서는 st.session을 쓰고 있지 않은 것 같아서(코드를 읽을 수는 없지만, 눈을 씻고 찾아봐도 st.session이라는 단어가 안보였어요), 구체적으로 “st.session을 사용해서 코드를 짜줘”라고 다시 부탁했습니다.
그랬더니 다음과 같은 코드를 짜주었습니다.
이 코드를 다시 복사 붙여넣기 해서, 상세하게 주석을 달아달라고 했습니다. 그걸 통해 대강 코드의 구조를 이해했구요.
그 다음에는 데이터를 저장만 하지 말고, 저장한 파일을 다운로드하는 기능까지 추가하고 싶어서, 지피티에게 그렇게 요청했습니다.
처음에는 이 추가요청을 수행하면서, 색깔 그래프로 bmi 상태 나타내는 기능은 빼버렸더라구요. 그래서 그 기능도 빼지 말고 반영해서 최종 코드를 달라고 했습니다.
import streamlit as st import pandas as pd from io import StringIO # BMI를 계산하는 함수 def calculate_bmi(weight, height): bmi = weight / (height ** 2) return bmi # BMI 범위에 따른 분류 및 색상 반환 def get_bmi_category(bmi): if bmi < 18.5: return "저체중", "blue" elif 18.5 <= bmi < 25: return "정상", "green" elif 25 <= bmi < 30: return "과체중", "orange" else: return "비만", "red" # 사용자의 데이터를 문자열로 변환하는 함수 def convert_data_to_csv(name, age, gender, bmi): # 사용자 데이터를 DataFrame으로 생성 data = pd.DataFrame({ "이름": [name], "나이": [age], "성별": [gender], "BMI": [f"{bmi:.2f}"] }) # StringIO 객체를 사용하여 DataFrame을 CSV 형식의 문자열로 변환 output = StringIO() data.to_csv(output, index=False) return output.getvalue() # Streamlit UI 구성 st.title("BMI 계산기") name = st.text_input("이름") age = st.number_input("나이", min_value=0, max_value=120) gender = st.radio("성별", ["남성", "여성"]) weight = st.number_input("몸무게(kg)") height = st.number_input("키(cm)") # BMI 계산 및 표시 if st.button("BMI 계산"): height_m = height / 100 # 키를 미터 단위로 변환 bmi = calculate_bmi(weight, height_m) # BMI 계산 category, color = get_bmi_category(bmi) # 체중 상태 및 색상 결정 st.write(f"{name}님의 BMI는 {bmi:.2f}입니다. 체중 상태: {category}.") # 결과 표시 # 프로그레스 바로 BMI 시각화 progress_value = bmi / 40 st.progress(progress_value) st.markdown(f'<style>.stProgress > div > div > div > div {{background-color: {color};}}</style>', unsafe_allow_html=True) # 세션 상태에 데이터 저장 st.session_state['bmi_data'] = convert_data_to_csv(name, age, gender, bmi) # 데이터 다운로드 버튼 if 'bmi_data' in st.session_state: st.download_button( label="데이터 저장", data=st.session_state['bmi_data'], file_name="bmi_data.csv", mime="text/csv", help="계산된 BMI 데이터를 CSV 파일로 다운로드합니다." )
이 코드를 넣고, 터미널에서 streamlit run [파이썬스크립트파일이름] 넣고 실행했더니, 다음과 같이 결과 잘 시행되었습니다!
[데이터 저장]을 눌렀더니 다음과 같이 파일이 잘 다운로드되었어요.
스트림릿 과제 완료!