본문 바로가기

프로그래밍/Python

[파이썬] 달력 만들기 import turtle 사용 calendar 없이 만들기

728x90
반응형

 

 

우리 학교 파이썬 수업 과제였습니다 ㅋㅋㅋㅋ

 

정말 한참 수정할게 많지만 나중에 하는걸로 하고 지금은 백업용으로 올립니다.

 

나름 리스트에 해당 년도 달력을 전부 넣고 싶어서 고민좀 했습니다.

 

WOD.py

# 모듈
import turtle
import returnday

# 터틀 입력창으로 연도 입력 받기 및 터틀 설정
turtle.title("달력 만들기")
turtle.hideturtle()
turtle.speed(0)
inputYear = int(turtle.numinput("달력 만들기", "표시할 달력의 연도를 입력하시오."))
print("%d" % (inputYear))
print()

# 터틀 창 테두리 꾸미기
turtle.penup()
turtle.pensize(3)
turtle.goto(-457, 387)
turtle.pendown()
turtle.forward(910)
turtle.penup()
turtle.right(90)
turtle.forward(95)
turtle.right(90)
turtle.pendown()
turtle.forward(910)
turtle.penup()

# 달력 연도 꾸미기
turtle.penup()
turtle.goto(440, 308)
turtle.pencolor("black")
turtle.write("Calendar %dy" % (inputYear), align = "right", font = ("Bahnschrift", 45, "normal"))

# 일 배열 입력
arrayDay = []

for i in range(12):
    arrayDay.append(list(returnday.month_range(inputYear, i + 1)))


print(arrayDay, end="\n\n")

# 월 영어
arrEngMonth = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"]

eng_y = 440
indexArrEngMonth = 0

# 월 배열 출력
for i in range(12):
    eng_x = -340
    eng_y -= 220
    for u in range(4):
        if indexArrEngMonth == 12:
            break
        turtle.goto(eng_x,eng_y)
        turtle.pencolor("black")
        turtle.write("%s" % arrEngMonth[indexArrEngMonth], align = "center", font = ("Bahnschrift", 25, "normal"))
        indexArrEngMonth += 1
        
        eng_x += 225

# 월별 일 입력 및 출력
arrayCalendarDay = []
eng_weekOfTheDay = ["S", "M", "T", "W", "T", "F", "S"]
arrColor = ["#930000", "black", "black", "black", "black", "black", "#005A81"]

# 리스트 7 * 7 * 12
for mm in range(12):
    for i in range(7):
        arrayCalendarDay.append([None] * 7)

m = 0
nummm = 0
frist_1 = 1
frist_2 = 2
wod_x = -414
wod_y = 190
wod_x_1 = 0
day_y_1 = 165
y_2 = 0

# 달력 출력
for num in range(12):
    day = 1
    isMonth = arrayDay[num][0]      # 1일이 어느 요일에 있는지
    isDay = arrayDay[num][1]        # 그 달이 며칠까지 있는지
    
    # 4열 출력후 아래로 계속 출력
    if m == 4:
        wod_x = -414
        wod_y -= 218
        day_y_1 -= 218
        m = 0

    # 요일 출력
    for i in range(7):
        arrayCalendarDay[nummm][i] = eng_weekOfTheDay[i]
        turtle.goto(wod_x, wod_y)
        turtle.pencolor(arrColor[i])
        if i == 0:
            wod_x_1 = wod_x
            wod_y_1 = wod_y - 50
        turtle.write("%s" % arrayCalendarDay[nummm][i], align = "right", font = ("Bahnschrift", 10, "normal"))
        wod_x += 26

    # 월 첫 주 먼저 출력
    for i in range(frist_1, frist_1 + 1):
        # 일 당기기
        day_x_1 = wod_x_1 + isMonth * 26
        for u in range(isMonth, 7):
            arrayCalendarDay[i][u] = day
            turtle.goto(day_x_1, day_y_1)
            turtle.pencolor(arrColor[u])
            turtle.write("%d" % arrayCalendarDay[i][u], align = "right", font = ("Bahnschrift", 10, "normal"))
            day_x_1 += 26
            day += 1

    # 그다음 출력
    for i in range(frist_2, frist_2 + 5):
        day_x_2 = wod_x_1
        day_y_2 = wod_y_1

        # 일이 해당 일보다 초과하면 다음으로 넘어감
        for u in range(7):
            if day > isDay:
                break
            arrayCalendarDay[i][u] = day
            day += 1
            turtle.goto(day_x_2, day_y_2)
            turtle.pencolor(arrColor[u])
            turtle.write("%d" % arrayCalendarDay[i][u], align = "right", font = ("Bahnschrift", 10, "normal"))
            
            day_x_2 += 26
        wod_y_1 -= 25

    wod_x += 40
    nummm += 7
    frist_1 += 7
    frist_2 += 7
    m += 1
    
print(arrayCalendarDay)
turtle.done()

# 끝



 

 

returnday.py

def month_range(year, month):
    ins_year = 1
    ins_month = 1

    ins_now_month = 0

    while True:
        now_month = 31

        if ins_month == 4 or ins_month == 6 or ins_month == 9 or ins_month == 11:
            now_month = 30

        elif ins_month == 2:
            if (ins_year % 4 == 0 and ins_year % 100 != 0) or ins_year % 400 == 0:
                now_month = 29

            else:
                now_month = 28

        if ins_year == year and ins_month == month:
            break

        ins_now_month += now_month
        ins_month += 1

        if ins_month > 12:
            ins_month = 1
            ins_year += 1

    
    wodIndex = (1 + ins_now_month) % 7

    return wodIndex, now_month

 

 

근데 교수님께서 인터넷에 있는거 배끼면 0점 준다고 했었음 ㅋㅋㅋ

 

 

 

 

정말 어이없는 곳에서 오류나가지고...

 

아직 멀었네요.

 

 

2020년 달력도 만들 수 있습니다.

 

시간이 된다면

 

공휴일은 전부 빨간색으로 출력하도록 해보려고 합니다.

 

아마 오랫동안 시간이 안될듯 ㅋㅋㅋㅋㅋㅋㅋㅋ

 

 

728x90
반응형