[zero-base/] DS Part 1. Python 중급 - 8일차 스터디 노트

손윤재·2023년 12월 13일

제로베이스 DS 22기

목록 보기
9/55
post-thumbnail

파이썬 중급 문제풀이

- 함수, 모듈



👌 예제 1. 함수

속도(km/h)와 시간(h)을 입력받아 이동거리(km)를 연산해주는 함수와
속도(km/h)와 이동거리(km)를 입력받아 이동시간(h)을 연산해주는 함수를 정의


📣 이동 거리 반환 함수

def getDistance(speed, hour, minute):
    distance = speed * (hour + (minute / 60))
    return distance
  • [ 거리(km) = 속도(km/h) × 시간(h) ] 공식을 사용한다.

  • 매개변수로 속도와 시간을 받아온다.
    이때 시간은 시(h) 단위와 분(m) 단위로 받는다.

    ✔ 시간 데이터를 입력받을 때 시간과 분을 따로 받을 수 있게 한다.

        s = float(input('속도(km/h) 입력: '))
        h = float(input('시간(h) 입력: '))
        m = float(input('시간(m) 입력: '))
       def getDistance(speed, hour, minute):
  • 따로 입력받은 분(m)은 시(h) 단위로 환산하기 위해 60으로 나눈다.
    최종 시간값은 (hour + (minute / 60))h 이다.

  • 입력받은 속도와 최종 시간값을 곱해 이동거리를 계산한 후 결과값을 반환한다.

        distance = speed * (hour + (minute / 60))
         return distance

📣 이동 시간 반환 함수

def getTime(speed, distance):
    time = distance / speed
    hour = int(time)
    minute = int((time - hour) * 60)    
    return [hour, minute]
  • 입력받은 속도와 거리를 인수로 받아온다.

        s = float(input('속도(km/h) 입력: '))
         d = float(input('거리(km) 입력: '))
        getTime(s, d):
  • [ 시간(h) = 거리(km) / 속도(km/h) ] 공식을 이용해 이동시간을 구한다.

        time = distance / speed
  • 시간 결과는 시(h) 단위와 분(m) 단위로 나누어 반환한다.

    	 return [hour, minute]
  • 시간 결과값이 실수이므로 적절한 단위 변환이 필요하다.

    ✔ 시(hour)는 int() 함수로 캐스팅하여 소수부분을 버리고 정수만 사용한다.
        ex> time = 2.1166666666666667일때
              int(time)  ➡  time = 2 가 된다.

    ✔ 분(minute)은 time값의 소수부분에 60만 곱하면 된다.
        ex> (time - int(time)) * 60
        ➡  연산 결과가 실수이므로 int형으로 캐스팅해준다.

           hour = int(time)
            minute = int((time - hour) * 60)
  • 시간 변환은 간단한 연산이므로 별도로 함수를 만들지는 않았다.

    	time = 2.12h --> 1h : 60m = 0.12h : x
              		  --> x = (60 * 0.12)m

📣 함수 실행

print('-' * 60)
s = float(input('속도(km/h) 입력: '))
h = float(input('시간(h) 입력: '))
m = float(input('시간(m) 입력: '))
d = getDistance(s, h, m)
print(f'{s}(km/h)속도로 {h}(h)시간 {m}(m)분 동안 이동한 거리: {d}(km)')
print('-' * 60)

print('-' * 60)
s = float(input('속도(km/h) 입력: '))
d = float(input('거리(km) 입력: '))
t = getTime(s, d)
print(f'{s}(km/h) 속도로 {d}(km) 이동한 시간: {t[0]}(h)시간 {t[1]}(m)분')
print('-' * 60)

# 실행결과
------------------------------------------------------------
속도(km/h) 입력: 90
시간(h) 입력: 2
시간(m) 입력: 7
90.0(km/h)속도로 2.0(h)시간 7.0(m)분 동안 이동한 거리: 190.5(km)
------------------------------------------------------------
------------------------------------------------------------
속도(km/h) 입력: 90
거리(km) 입력: 190.5
time: 2.1166666666666667
90.0(km/h) 속도로 190.5(km) 이동한 시간: 2(h)시간 7(m)------------------------------------------------------------




👍 예제 2. 모듈

과목별 점수로 합격 여부를 출력하는 함수를 모듈로 만들고,
이를 실행 파일에서 import하여 사용한다.


📣 모듈 만들기

과목별 점수를 받아와 총점과 평균을 구하고 합격 여부를 출력하는 '시험결과' 함수를 정의한다.

 def examinationResult(*scores):
  • 몇 개의 인수를 받을지 개수를 정하지 않고 *를 사용해 매개변수를 정의한다.

    ✔ 함수 호출부에서 과목별 점수를 나열해서 인수로 넘겨주면
        함수 내부에서 scores는 <class 'tuple'>형으로 값을 받는다.

      exampleResult(sub1, sub2, sub3, sub4, sub5)
  • '시험결과' 함수 내에 총점과 평균을 구하는 함수를 정의한다.
    각 함수는 결과값을 반환하고, 그 결과도 같이 출력한다.

    ✔ scores 자료형이 열거형이므로
       합계를 반환하는 sum()함수와 길이를 반환하는 len()함수를 사용할 수 있다.

  • '시험결과' 함수 호출로 모든 결과가 보여지도록 출력함수를 정의한다.

     def printSubjetPassOrFail():
          sub_pass_flag = True
    
          for idx, score in enumerate(s):
              if score >= subLimitScore:
                  print(f'과목{idx + 1}: Pass')
              else:
                  print(f'과목{idx + 1}: Fail')
                  sub_pass_flag = False
    
          return sub_pass_flag

    ✔ for문을 돌면서 과목별 과락여부를 판단해 'Pass'인지 'Fail'인지 보여주고,
       과락이 있으면 sub_pass_flag로 False를 리턴한다.
        - enumerate 클래스를 이용해 각 점수별로 차례차례 index를 붙여
          과목을 구분해서 출력한다.

       def printFinalPassOrFail():
            result = ''
            if (getAverage() >= passAvgScore) and printSubjetPassOrFail():
                result = 'Final Pass!!'
            else:
                result = 'Final Fail!!'
    
            print(result)
            
        printFinalPassOrFail()

    ✔ 시험 전체 합격 여부를 판단해 결과를 출력하는 함수를 정의한다.
        - getAverage() 함수를 호출해 평균이 합격점인지 판단하고,
        - printSubjetPassOrFail() 함수를 호출해 과락여부를 판단한다.
        - 둘 다 True 여야만 전체 시험 PASS!가 된다.
        - 마지막으로 '시험결과' 함수 내 정의된 모든 함수가 호출되도록
          printFinalPassOrFail() 함수를 호출해 준다.


📣 모듈 실행하기

  # <Q> --------------------------------------------------------
  # 과목별 점수를 입력하면 합격 여부를 출력하는 모듈
  # (평균 60이상이면 합격!, 과락은 40으로 한다.)

  import module_PassOrFail as pf

  if __name__ == '__main__':

      sub1 = int(input('과목1 점수 입력: '))
      sub2 = int(input('과목2 점수 입력: '))
      sub3 = int(input('과목3 점수 입력: '))
      sub4 = int(input('과목4 점수 입력: '))
      sub5 = int(input('과목5 점수 입력: '))

      pf.exampleResult(sub1, sub2, sub3, sub4, sub5)
  • 실행 파일에서 모듈을 import하고 '시험결과' 함수를 호출한다.

     pf.exampleResult(sub1, sub2, sub3, sub4, sub5)
  • 실행 결과


profile
ISTP(정신승리), To Be Data Scientist

0개의 댓글