제로베이스 데이터 파트타임 스쿨 학습 일지 [25.03.25]

[강의 요약]

[Ch 02. 파이썬 기초 문제풀이] 강의 수강

48_연산자(01)부터 52_연산자(05)까지 강의 수강하였음

연습문제 다루는 강의는 코드 부분과 간단한 코드 해석으로 글을 구성할 예정

그런데 연산자 부분은 대학교 강의에서 실습코드 정도의 난이도여서

코드를 많이 스킵해서 작성했다.

 

 

[연산자]

▶ 고도에 따라 기온을 계산하는 프로그램

기온은 고도가 높아질수록 낮아진다는 원리를 코드로 구현함

baseTemp = 29
step = 60
stepTemp = 0.8

height = int(input('고도 입력: '))

targetTemp = baseTemp - (height // step * 0.8)

if height % step != 0:
    targetTemp -= stepTemp

print('지면 온도: {}'.format(baseTemp))
print('고도 {}m의 기온: {}'.format(height, targetTemp))

★코드 설명★

사용한 변수 설명

 

  • baseTemp : 기준 온도 (지면 온도)
  • step : 고도 간격 (ex. 60m 올라갈 때마다)
  • stepTemp : 기온 하강폭. 60m당 -0.8도씩 감소
  • height : 사용자가 입력한 고도 (ex. 150m)

코드 로직

 

  • height // step : 고도에 따라 몇 "단계"만큼 올라갔는지 (ex. 150m → 2단계)
  • * 0.8 : 단계당 0.8도씩 감소
  • height % step != 0 : 딱 맞아떨어지지 않는 경우, 즉 중간 높이까지 올라갔으면 → 한 단계 더 빼줌

 

고도 150m의 기온은?

  • 150 // 60 = 2 → 2 * 0.8 = 1.6 → 29 - 1.6 = 27.4
  • 150 % 60 = 30 → 나머지 존재함 → -0.8 해줘야함
  • 27.4 - 0.8 = 26.6

 

 

▶ 위 코드 최적화

어떻게 코드를 최적화하면 좋을까?

  • 먼저 변수명을 더 가독성이 좋게 변경
  • 온도 하강량 계산을 조건문 사용 없이 math.ceil()로 단순하게 계산
  • .1f 로 소수점 한 자리까지 출력
  • 전 글에서도 말했던 f-string으로도 원래 코드를 대체
# 기본값 설정
base_temp = 29.0
cooling_rate = 0.8
altitude_step = 60

# 고도 입력
height = int(input('고도 입력 (단위: m): '))

# 올림: 고도 1m라도 올라가면 그 구간 전체 적용
import math
steps = math.ceil(height / altitude_step)
target_temp = base_temp - (steps * cooling_rate)

# 출력
print(f'지면 온도: {base_temp}°C')
print(f'고도 {height}m의 기온: {target_temp:.1f}°C')

☆ math.ceil() 은 왜 사용했고 뭘까?

  • 기본 설명
    • 소수점이 조금이라도 있으면 무조건 올림함
    • 정수보다 크거나 같은 가장 작은 정수로 만들어줌
  • 사용 방법
    • import math 필수
    • 아래 코드 참고
  • 사용한 이유
    • 150 // 60, 150 % 60 결과 여부로 값을 빼줘야 함
    • 사실상 올림을 하고 있는 것이라 150 / 60에 ceil을 하는 게 편함
    • // 나누기 + if 조건문 없이 깔끔하게 계산하기 위함
  • TMI
    • math.ceil()은 올림인데 반대로 내림을 하는 math.floor()도 있음
    • math.floor(4.3) → 4
    • math.floor(-4.3) → -5
import math

print(math.ceil(4.1))   # 결과: 5
print(math.ceil(7.9))   # 결과: 8
print(math.ceil(5.0))   # 결과: 5 (정수는 그대로 유지)
print(math.ceil(-1.2))  # 결과: -1 (음수도 올림된다!)

 

 

 

[나의 생각 정리]

  • 쉬운 코드에 경우 어떻게 하면 더 최적화를 시킬지 고민하는 시간을 가졌음

 

[적용점]

  • 고민하는 시간을 조금만 더 가진다면 코드를 더 간결하게 작성할 수 있음

 

 

 

“이 글은 제로베이스 데이터 스쿨 주 3일반 강의 자료 일부를 발췌하여 작성되었습니다.”