인프런 커뮤니티 질문&답변
2번문제
해결된 질문
작성
·
21
0
import pandas as pd
df = pd.read_csv("https://raw.githubusercontent.com/lovedlim/inf/refs/heads/main/p4/5_1/5-2bmi.csv")
# your code
df['bmi']=df['Weight']/(df['Height']*df['Height'])*10000
df['위험']=(df['bmi'] >=23) & (df['bmi']<25)
df['정상']=(df['bmi'] >=18.5) & (df['bmi']<23)
print(sum(df['위험']),sum(df['정상']))
저는 코드를 이렇게 짰는데,, 위험이
2129명이라고 나오는데
선생님이 올려주신 정답지는 2130명이더라구요 ㅠ왜다를까요?
2. bmi를 계산하고, 수치가 정상인 사람 수와 위험체중인 사람 수의 차이를 절대값으로 구하시오 (정수로 출력)
- bmi(체질량지수): 몸무게(kg) / 키(m)의 제곱
단위
- Height: cm
- Weight: kg
- 저체중: BMI 18.5미만
- 정상체중: BMI 18.5이상 ~ 23미만
- 과체중 또는 위험체중: BMI 23 이상 ~ 25미만
- 비만체중: 25이상
답변 2
0
두 식은 수학적으로는 동일하지만, 컴퓨터의 부동소수점 계산 과정에서 오차로 인한 문제입니다.
시험에서는 이런 부분을 고려할 것 같습니다. (아마도 풀이한 문제도 동일한 정답이 될 것 같아요)
다만 그래도 안정적인게 좋기 때문에 문제에서 제시한 수식으로 사용해주세요!
화이팅:)
0
안녕하세요, 인프런 AI 인턴입니다.
moonmoon250919님께서 작성하신 코드에서 bmr 수치가 예상과 다르게 나오는 이유는 부동소수점 연산과 비교에서 발생하는 미세한 오차 때문일 가능성이 높습니다. 파이썬에서는 소수점 계산 시 아주 작은 오차가 발생할 수 있으며, 이로 인해 특정 조건을 만족하지 않는 경우가 생길 수 있습니다.
위 본문 질문에 대한 내용은 실제로 유사한 상황이 다음과 같은 링크에서 다뤄졌습니다:
- 5회 기출유형 질문 > 부동소수점으로 인한 계산 오차
부동소수점 문제를 해결하기 위해, 소수점 자릿수를 조정하거나 비교할 때 약간의 여유를 두는 것이 방법이 될 수 있습니다. 예를 들어, round() 함수를 사용하여 소수점 자릿수를 설정하여 비교를 해 볼 수 있습니다:
import pandas as pd
df = pd.read_csv("https://raw.githubusercontent.com/lovedlim/inf/refs/heads/main/p4/5_1/5-2bmi.csv")
df['Height(m)'] = df['Height'] / 100
df['bmi'] = df['Weight'] / (df['Height(m)'] ** 2)
df['위험'] = (df['bmi'] >= 23) & (df['bmi'] < 25)
df['정상'] = (df['bmi'] >= 18.5) & (df['bmi'] < 23)
print(sum(df['위험']), sum(df['정상']))
print(abs(sum(df['위험']) - sum(df['정상'])))
위 방법으로 소수점 계산의 오차를 줄일 수 있으며, 이에 따라 정확한 값을 얻을 가능성이 높아집니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.





