제로부터 시작하는 코딩 생활

[파이썬] 요일 예측기 본문

심심해서 만든거

[파이썬] 요일 예측기

VacTEn 2022. 3. 22. 09:40

교수님이 과제를 내주셨다.

오늘은 월요일이다.
100일뒤의 요일은 무슨 요일인가?
파이썬을 이용하여 계산해보아라.

 

1차 시도

Week = ["일요일", "월요일", "화요일", "수요일", "목요일", "금요일", "토요일"]
Today = Week[0]
DayAfter = Week[100 % 7]
print(DayAfter)

작동여부: ok

결과값 : ok

 

대충 짜긴 했는데 다른요일일때 나머지를 더했을때 리스트에서 인덱싱을 못하거나 작동을 안할 수있다.

할짓도 없는데 모든 요일, 모든 날짜에 대해 작동하는 요일예측기를 만들어 보기로했다.

 

 

요일예측기

a = input("오늘은 무슨요일 입니까? (ex:월요일): ")
DaysAfter = input("몇일 후의 요일을 알고 싶으십니까? (숫자만입력): ")

Week = ["일요일", "월요일", "화요일", "수요일", "목요일", "금요일", "토요일", "일요일", "월요일", "화요일", "수요일", "목요일", "금요일", "토요일"]
DayNumbering = {"일요일": 0, "월요일": 1, "화요일": 2, "수요일": 3, "목요일": 4, "금요일": 5, "토요일": 6}

Today = DayNumbering[a]
WhatdayToday = Week[Today]
WhatDay = Week[Today + int(DaysAfter) % 7]

print("오늘은 %s입니다. 따라서 %d일후는 %s입니다." %(WhatdayToday, int(DaysAfter), WhatDay))

짜잔

중간에 구문오류도 많이나고 짜임이 맘에 안들어서 몇번 뒤엎기도 했는데 기록하는걸 깜빡했다.

하여튼 input에 조건만 잘지키면 아주 잘 작동한다.

 

해석

a = input("오늘은 무슨요일 입니까? (ex:월요일): ")
DaysAfter = input("몇일 후의 요일을 알고 싶으십니까? (숫자만입력): ")

원하는 요일과 날짜를 입력받는다.

Week = ["일요일", "월요일", "화요일", "수요일", "목요일", "금요일", "토요일", "일요일", "월요일", "화요일", "수요일", "목요일", "금요일", "토요일"]
DayNumbering = {"일요일": 0, "월요일": 1, "화요일": 2, "수요일": 3, "목요일": 4, "금요일": 5, "토요일": 6}

계산에 사용하기 위해 미리 요일 리스트를 만들어주고

입력받은 스트링형태의 요일로 리스트를 인덱싱 하기위해 요일마다 리스트에 맞게 딕셔너리를 사용하여 넘버링을 해주었다.

리스트가 아까전보다 길어졌는데 그 이유가 만약 토요일일때 하루 뒤의 요일을 알고 싶다면 과제로 만든 코드에서는 오류가 난다. 리스트가 토요일이 끝이기 때문이다. 그렇기에 모든 요일 모든 날짜에 계산할 수 있도록, 최대값인 토요일의 6일 후까지 계산 가능하도록 리스트를 늘렸다.

Today = DayNumbering[a]

입력받은 요일 input과 미리 만들어놓은 딕셔너리에 대조되는 넘버를 Today라는 변수로 지정해준다.

딕셔너리의 Key 와 input의 타입이 모두 스트링이기에  작동이 된다.

이것은 단순히 다음줄을 위한것뿐만 아니라 추후에 계산하여 인덱싱 할때 사용된다.

WhatdayToday = Week[Today]

Today에 지정해준 수를 사용하여 요일 리스트에서 오늘의 요일을 변수로 새로 만든다.

글을 쓰면서 생각난건데 아래처럼 간단히 바꿔도 코드가 잘 돌아간다. 왜 굳이 복잡하게 했지 싶다.

WhatdayToday = a

다시 돌아가서 

WhatDay = Week[Today + int(DaysAfter) % 7]

오늘 요일에 해당하는 값과 정수형으로 바꾼 입력받은 날짜를 7로 나눈 나머지를 더한 값으로 리스트에서 인덱싱하여 새로운 변수로 지정해준다.

print("오늘은 %s입니다. 따라서 %d일후는 %s입니다." %(WhatdayToday, int(DaysAfter), WhatDay))

미리 지정해둔 변수들을 가지고 결과값을 출력한다.

 

그래서 다시 수정해보면 다음과 같다.

a = input("오늘은 무슨요일 입니까? (ex:월요일): ")
DaysAfter = input("몇일 후의 요일을 알고 싶으십니까? (숫자만입력): ")

Week = ["일요일", "월요일", "화요일", "수요일", "목요일", "금요일", "토요일", "일요일", "월요일", "화요일", "수요일", "목요일", "금요일", "토요일"]
DayNumbering = {"일요일": 0, "월요일": 1, "화요일": 2, "수요일": 3, "목요일": 4, "금요일": 5, "토요일": 6}

Today = DayNumbering[a]
WhatdayToday = a
WhatDay = Week[Today + int(DaysAfter) % 7]

print("오늘은 %s입니다. 따라서 %d일후는 %s입니다." %(WhatdayToday, int(DaysAfter), WhatDay))

'심심해서 만든거' 카테고리의 다른 글

[파이썬] n 이하의 소수 찾기  (0) 2022.03.28