파이썬에서 두 수의 차이를 절댓값으로 구하는 방법
파이썬에서 두 수의 차이를 절댓값으로 구하는 방법
두 값이 얼마나 떨어져 있는지 구할 때는 빼기 결과의 부호가 필요하지 않습니다. 이때 파이썬 내장 함수 abs()를 사용하면 어느 값을 먼저 빼더라도 같은 거리를 얻을 수 있습니다.
가장 간단한 형태
a = 3
b = 10
difference = abs(a - b)
print(difference) # 7
a - b는 -7이지만 abs(-7)은 7을 반환합니다. 순서를 바꿔 abs(10 - 3)으로 계산해도 결과는 같습니다.
조건문으로 만든 코드와 비교
if a >= b:
difference = a - b
else:
difference = b - a
이 코드도 맞지만 “두 값 사이의 거리”라는 의도는 abs(a - b)가 더 직접적으로 표현합니다.
변화량과 거리는 다르다
절댓값은 방향 정보를 없앱니다. 어제 10도에서 오늘 4도가 됐다면 today - yesterday는 -6으로 하락 방향을 알려 줍니다. abs(today - yesterday)는 6도 차이라는 크기만 알려 줍니다.
yesterday = 10
today = 4
change = today - yesterday
distance = abs(change)
print(change) # -6
print(distance) # 6
함수로 만들어 재사용하기
def distance(a, b):
return abs(a - b)
print(distance(12, 5)) # 7
print(distance(-2, 4)) # 6
정수뿐 아니라 실수에도 사용할 수 있습니다. 다만 소수 계산은 이진 부동소수점 특성 때문에 0.1 + 0.2처럼 아주 작은 오차가 나타날 수 있습니다. 금액처럼 정확한 십진 계산에는 decimal.Decimal을 고려해야 합니다.
좌표 사이의 거리로 확장하기
한 줄 위의 두 위치 차이는 절댓값 하나면 충분합니다. 2차원 좌표의 직선거리는 피타고라스 공식을 사용합니다.
from math import hypot
x1, y1 = 1, 2
x2, y2 = 4, 6
distance = hypot(x2 - x1, y2 - y1)
print(distance) # 5.0
입력값 검증
try:
a = float(input("첫 번째 수: "))
b = float(input("두 번째 수: "))
except ValueError:
print("숫자를 입력해야 합니다.")
else:
print("두 수의 거리:", abs(a - b))
오류 사례: 문자열을 그대로 뺄 수 없다
a = input("첫 번째 수: ")
b = input("두 번째 수: ")
print(abs(a - b))input()은 문자열을 반환하므로 이 코드는 TypeError를 냅니다. 먼저 허용할 숫자 형식을 정하고 변환해야 합니다. 정수만 받으면 int(), 소수도 받으면 float()를 사용합니다.
실전 문제: 목표 온도와 현재 온도
현재 온도와 목표 온도를 입력받아 차이가 2도 이하면 “적정”, 그보다 크면 “조절 필요”를 출력해 보십시오. 차이의 크기는 abs()로 구하지만, 난방과 냉방 중 무엇이 필요한지 판단하려면 target - current의 부호를 별도로 보존해야 합니다. 하나의 계산에서 크기와 방향이 어떻게 다른 역할을 하는지 확인하는 연습입니다.
정리
차이의 방향이 필요하면 그대로 빼고, 차이의 크기만 필요하면 abs(a - b)를 사용하십시오. 먼저 문제에서 요구하는 값이 변화량인지 거리인지 구분하는 것이 핵심입니다.