Today I Learned/Python & Pandas

[Python] datetime, timedelta 라이브러리 사용해서 Timetable 만들기

하나719 2020. 10. 14. 23:41
반응형
파톺 4주차 과제_최하나

Python 라이브러리를 이용한 Timetable 만들기

아래의 코드를 보고 빈칸 6개와 질문 2개에 대해 답을 찾아주세요.


코드 내의 빈칸의 알맞은 파이썬 코드를 넣어보고 예시와 동일한 출력값이 나오는지 확인해보세요.


여러분의 파이썬 톺아보기를 응원합니다!

In [55]:
from IPython.core.display import display, HTML
display(HTML("<style>.container {width:90% !important;}</style>"))
In [1]:
from datetime import datetime, timedelta
In [15]:
time_now = datetime(2020, 10, 17, 10, 15, 0)
In [16]:
time_now
Out[16]:
datetime.datetime(2020, 10, 17, 10, 15)

빈칸 1

In [17]:
am_pm = ''
if time_now.hour < 12: ### 빈칸 1 : if 조건문
    am_pm = "Am"
else:
    am_pm = "Pm"
hour_12 = str(time_now.hour - 12 if time_now.hour > 12 else time_now.hour)
print("수업 시작은 " + am_pm + " " + hour_12 + ":" + str(time_now.minute) + " 입니다")
수업 시작은 Am 10:15 입니다

if문 연습

  • (조건문 참일 때 return 값) if (조건문) else (조건문 거짓일 때 return 값)
In [35]:
a = 10
b = 1
In [36]:
print(a if a > 5 else b)
print(a if a > 10 else b)
10
1

빈칸 2

In [39]:
##### 변수추가 #################
study_minutes = 50 #공부할 시간 
lunch_minutes = 90 #점심 먹는 시간 
break_minutes = 15 #쉬는시간
###############################

next_start_time = time_now
next_end_time = time_now + timedelta(minutes = study_minutes) ### 빈칸 2: timedelta 괄호 내 코드 빈칸
In [22]:
next_end_time
Out[22]:
datetime.datetime(2020, 10, 17, 11, 5)

빈칸 3~6

In [40]:
##Period가 빈칸2에 있으니까 실행할때마다 period가 증가해서 여기로 가져왔어요
period = 1 
for i in range(1, 10):
   
        
    i_start_hour = str(next_start_time.hour - 12 if next_start_time.hour > 12 else next_start_time.hour)
    i_start_minute = str(next_start_time.minute)

    i_end_hour = str(next_end_time.hour - 12 if next_end_time.hour > 12 else next_end_time.hour)
    i_end_minute = str(next_end_time.minute)

    # print
    
    # 쉬는시간 or 점심시간
    if i % 2 == 0: ## 질문 1. 이 조건문은 무엇을 의미할까요 ??
        
        if i == 4: ## 빈칸 3. if 조건문 채우기
            print("-",)
            print("Lunch Time | " + i_start_hour + ":" + i_start_minute + " ~ " + i_end_hour + ":" + i_end_minute)
        else:
            print("Break Time | " + i_start_hour + ":" + i_start_minute + " ~ " + i_end_hour + ":" + i_end_minute)
   
    # 수업시간
    else:
        print("-" * 15)
        print("Period " + str(period) + "   | " + i_start_hour + ":" + i_start_minute + " ~ " + i_end_hour + ":" + i_end_minute)
        period += 1

    # time_calculate
    next_start_time = next_end_time
    
    #쉬는 시간 출력 후
    if i % 2 == 0:
        next_end_time = (next_start_time + timedelta(minutes = study_minutes)) ##빈칸4 
    
    #수업 시간 출력 후
    else:
        
        #Lunch Time
        if i == 3: ## 질문 2. 이 조건문은 무엇을 의미할까요 ??
            next_end_time = (next_start_time + timedelta(minutes = lunch_minutes)) ##빈칸 5. +=?
        else:
            next_end_time = (next_start_time + timedelta(minutes = break_minutes))##빈칸 6. +=?
---------------
Period 1   | 10:15 ~ 11:5
Break Time | 11:5 ~ 11:20
---------------
Period 2   | 11:20 ~ 12:10
-
Lunch Time | 12:10 ~ 1:40
---------------
Period 3   | 1:40 ~ 2:30
Break Time | 2:30 ~ 2:45
---------------
Period 4   | 2:45 ~ 3:35
Break Time | 3:35 ~ 3:50
---------------
Period 5   | 3:50 ~ 4:40

Q.서술형 문제

  1. 코드를 보고 질문 1번의 답변을 써 주세요 :

2로 나눈 나머지가 0 일때 코드 실행

시간표가 수업 - 쉬는시간 - 수업 - 쉬는시간(런치) - 수업 - 쉬는시간 번갈아가면서 진행 된다.

순서에 따라서 수업시간 혹은 쉬는시간을 차례로 구분해주기 위해서 이런 조건문을 사용했다.

  • 1 % 2 = 1 -> 수업시간
  • 2 % 2 = 0 -> 쉬는시간
  • 3 % 2 = 1 -> 수업시간
  • 4 % 2 = 0 -> 쉬는시간
  1. 코드를 보고 질문 2번의 답변을 써 주세요 :

Period 2 출력한 뒤 이므로 다음은 Lunch Time을 출력할 차례이다.

Lunch는 다른 쉬는시간이랑 기간이 다르기 때문에 특별히 따로 코드를 작성해준다.

Q+.선택 문제 : 위 문제를 모두 푸셨다면, 코드를 본인의 방식으로 수정해보세요!

  • 수업시간에 배운 것을 활용해도 좋고,
  • 긴 코드를 짧은 코드로 바꾸어보어도 좋고,
  • 변수를 더 직관적으로 바꾸어봐도 좋아요!
    ex) 수정 전 print('———————') -> 수정 후 print('' 15)
In [45]:
# 빈칸2번 입력하는 단계 줄여준 함수 버전  - 추가 1
def Timetable(next_start_time,break_minutes,lunch_minutes,study_minutes):
    
    period = 1
    
    for i in range(1, 10):
        
        # 추가1 
        # 첫번째 시간 일 때 수업시간으로 끝나는 시간 정해주기
        if i == 1:
            next_end_time = next_start_time + timedelta(minutes = study_minutes)
        
        i_start_hour = str(next_start_time.hour - 12 if next_start_time.hour > 12 else next_start_time.hour)
        i_start_minute = str(next_start_time.minute)

        i_end_hour = str(next_end_time.hour - 12 if next_end_time.hour > 12 else next_end_time.hour)
        i_end_minute = str(next_end_time.minute)

        # print
    
        # 쉬는시간 or 점심시간
        if i % 2 == 0: ## 질문 1. 이 조건문은 무엇을 의미할까요 ??
        
            if i == 4: ## 빈칸 3. if 조건문 채우기
                print("-",)
                print("Lunch Time | " + i_start_hour + ":" + i_start_minute + " ~ " + i_end_hour + ":" + i_end_minute)
            else:
                print("Break Time | " + i_start_hour + ":" + i_start_minute + " ~ " + i_end_hour + ":" + i_end_minute)
   
        # 수업시간
        else:
            print("-" * 15)
            print("Period " + str(period) + "   | " + i_start_hour + ":" + i_start_minute + " ~ " + i_end_hour + ":" + i_end_minute)
            period += 1

        # time_calculate
        next_start_time = next_end_time
    
        #쉬는 시간 출력 후
        if i % 2 == 0:
            next_end_time = (next_start_time + timedelta(minutes = study_minutes)) ##빈칸4 
        
        #수업 시간 출력 후
        else:
        
            #Lunch Time
            if i == 3: ## 질문 2. 이 조건문은 무엇을 의미할까요 ??
                next_end_time = (next_start_time + timedelta(minutes = lunch_minutes)) ##빈칸 5. +=?
            else:
                next_end_time = (next_start_time + timedelta(minutes = break_minutes))##빈칸 6. +=?
    
In [53]:
# 중복 줄여준 버전
# 아래 한번 더 쓰인 if문 합쳐주고, plus_minutes 변수 추가해서 각 If 문에서 다음에 몇분 더해줄건지 받아서 계산
def Timetable2(next_start_time,break_minutes,lunch_minutes,study_minutes):
    
    period = 1
    plus_minutes = 0
    
    for i in range(1, 10):
        
        # 첫번째 시간 일 때 수업시간으로 끝나는 시간 정해주기
        if i == 1:
            next_end_time = next_start_time + timedelta(minutes = study_minutes)
        
        i_start_hour = str(next_start_time.hour - 12 if next_start_time.hour > 12 else next_start_time.hour)
        i_start_minute = str(next_start_time.minute)

        i_end_hour = str(next_end_time.hour - 12 if next_end_time.hour > 12 else next_end_time.hour)
        i_end_minute = str(next_end_time.minute)

        # print
    
        # 쉬는시간 or 점심시간
        if i % 2 == 0: 
        
            if i == 4: 
                print("-",)
                print("Lunch Time | " + i_start_hour + ":" + i_start_minute + " ~ " + i_end_hour + ":" + i_end_minute)
                
            else:
                print("Break Time | " + i_start_hour + ":" + i_start_minute + " ~ " + i_end_hour + ":" + i_end_minute)
               
            next_start_time = next_end_time
            plus_minutes = study_minutes
   
        # 수업시간
        else:
            print("-" * 15)
            print("Period " + str(period) + "   | " + i_start_hour + ":" + i_start_minute + " ~ " + i_end_hour + ":" + i_end_minute)
            period += 1
            
            next_start_time = next_end_time
            if i == 3: 
                plus_minutes = lunch_minutes 
            else:
                plus_minutes = break_minutes
        
        # 다음 end_time 최종 계산
        next_end_time = (next_start_time + timedelta(minutes = plus_minutes)) 
In [46]:
next_start_time = datetime(2020, 10, 17, 10, 15, 0) # 수업 시작시간 입력해주세요.
break_minutes = 10
lunch_minutes = 100
study_minutes = 40

Timetable(next_start_time,break_minutes,lunch_minutes,study_minutes)
---------------
Period 1   | 10:15 ~ 10:55
Break Time | 10:55 ~ 11:5
---------------
Period 2   | 11:5 ~ 11:45
-
Lunch Time | 11:45 ~ 1:25
---------------
Period 3   | 1:25 ~ 2:5
Break Time | 2:5 ~ 2:15
---------------
Period 4   | 2:15 ~ 2:55
Break Time | 2:55 ~ 3:5
---------------
Period 5   | 3:5 ~ 3:45
In [48]:
next_start_time = datetime(2020, 10, 17, 10, 30, 0) # 수업 시작시간 입력해주세요.
break_minutes = 20
lunch_minutes = 90
study_minutes = 45

Timetable(next_start_time,break_minutes,lunch_minutes,study_minutes)
---------------
Period 1   | 10:30 ~ 11:15
Break Time | 11:15 ~ 11:35
---------------
Period 2   | 11:35 ~ 12:20
-
Lunch Time | 12:20 ~ 1:50
---------------
Period 3   | 1:50 ~ 2:35
Break Time | 2:35 ~ 2:55
---------------
Period 4   | 2:55 ~ 3:40
Break Time | 3:40 ~ 4:0
---------------
Period 5   | 4:0 ~ 4:45
In [54]:
next_start_time = datetime(2020, 10, 17, 10, 30, 0) # 수업 시작시간 입력해주세요.
break_minutes = 20
lunch_minutes = 90
study_minutes = 45

Timetable2(next_start_time,break_minutes,lunch_minutes,study_minutes)
---------------
Period 1   | 10:30 ~ 11:15
Break Time | 11:15 ~ 11:35
---------------
Period 2   | 11:35 ~ 12:20
-
Lunch Time | 12:20 ~ 1:50
---------------
Period 3   | 1:50 ~ 2:35
Break Time | 2:35 ~ 2:55
---------------
Period 4   | 2:55 ~ 3:40
Break Time | 3:40 ~ 4:0
---------------
Period 5   | 4:0 ~ 4:45
In [ ]:
 
반응형