본문 바로가기
Python(with Anaconda)

[Python] 서울 신림선 운행 소요시간 계산 프로그램 만들기

by moveho 2022. 10. 25.

신림선(샛강 ~ 관악산역)  출발역 부터 도착역 까지 소요시간 계산 프로그램을 만들어 봤다.
역 간 운행시간은 2분으로 가정하여 만들어보았다.

station = {'샛강' : 1, '대방' : 2, '서울지방병무청' : 3, '보라매역' : 4,
'보라매공원' : 5, '보라매병원' : 6, '당곡' : 7, '신림' : 8, '서원' : 9,
'서울대벤쳐타운' : 10, '관악산' : 11}

station 이라는 딕셔너리를 만들었다.

각각의 역에 숫자를 부여하여 소요시간을 계산하려고 설계하였다

예를들어  샛강에서 보라매역까지 가게된다면 1번에서 4번역까지 총 3정거장을 가야만 한다.

따라서, 3정거장 * 2 라는 연산을 통해 총 6분이라는 소요시간이 걸리는것을 알 수 있다.

 

start = input("출발역을 입력하시오.: ")
finish = input("도착역을 입력하시오.: ")
timestat = 0

사용자로 하여금 출발역과 도착역을 입력받게 설계하였고

항상 모든 계산식 앞에는 리셋을 위하여 0을 붙여주도록 한다.

걸리는 시간을 timestat 이라고 설정하였다.

 

if start in station.keys():
    timestat = station[start] - station[finish]
    print("%d분 소요 예상됩니다." % (abs(timestat)*2))

station안에 있는 keys 값들이 start 안에 있으면 timestat 값을 계산하게 되는데

출발역에서 도착역의 번호 숫자를 마이너스 연산을 하도록 했다.

그 후 formating을 이용하여 총 걸리는 시간을 표현 했는데 

혹여 각 역에 부여했던 번호들의 연산이 - 마이너스 값이 나올수 있는 에러가 있을 수 있어

연산값을 절대값 처리를 하기 위해 abs 함수를 사용하였다.

                       대방에서 관악산역(하행)                                     관악산에서 대방 (상행)                                 key에 없는 값을 넣으면 아무것도 안나옴

 

만약 알맞지 않은 값을 넣었을 때 오류메시지를 띄우는 것을 구현하고 싶어서

코드를 보완하였다.

 

station = {'샛강' : 1, '대방' : 2, '서울지방병무청' : 3, '보라매역' : 4, '보라매공원' : 5, '보라매병원' : 6, '당곡' : 7, '신림' : 8, '서원' : 9, '서울대벤쳐타운' : 10, '관악산' : 11}
start = ""
finish = ""

while not((start in station.keys()) and (finish in station.keys())):    # 예외 처리
    start = input("출발역을 입력하시오.: ")
    finish = input("도착역을 입력하시오.: ")
    if not((start in station.keys()) and (finish in station.keys())):
        print("역 이름을 잘못 입력하셨습니다.")
    else:                                                               # 출력
        timestat = station[start] - station[finish]
        print("%d분 소요 예상됩니다." % (abs(timestat)*2))

보완한 코드이다.

station 안에 있는 key 값들이 사용자가 입력한 start 안에 있어야하고 and 로 묶어 사용자가 입력한 도착지 finish 값안에도 key 값들이 알맞게 있어야만 (and) 출력하게끔 설계하였다.

만약 사용자들이 입력한 값들이  station 안 key 값으로 없으면 (start and finish 출발점 도착점 모두) 

역 이름을 잘못 입력했다고 프린트 하게 만들었다.

else로 이 모든 조건들이 만족된다면 설계한 연산식에(abs(timestat)*2)) 맞추어 연산이 되고 (abs 절대값 처리도 들어감)

연산된 값은 formating 과정을 거쳐 프린트 되게 된다.!

예외값을 처리 후 오류 알림을 하는 모습

또한 while 을 이용했기 때문에 만약 값이 잘못됐다면

반복해서 알맞은 값을 넣어 연산해서 값이 도출되기 전까지

계속해서 반복되어 출발역을 물어보게 된다.

댓글