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

2019. 11. 28. 12:26·이전 게시글/공부 관련

 

 

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

 

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

 

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

 

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년 달력도 만들 수 있습니다.

 

시간이 된다면

 

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

 

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

 

 

저작자표시 (새창열림)

'이전 게시글 > 공부 관련' 카테고리의 다른 글

[C++] fill, fill_n 배열을 초기화 하는 방법, 2차원, 3차원 배열 초기화  (0) 2022.04.11
[C언어] 하샤드수 구하기, int 각 자릿수 더하기  (0) 2022.02.23
[파이썬] 숫자 맞추기 게임 from random import randint  (0) 2019.10.23
[파이썬] 숫자를 입력하고 각 자릿수 숫자를 더하는 프로그램  (0) 2019.10.23
[파이썬] 년, 월, 일 받아서 요일 출력하기 datetime.date  (0) 2019.10.23
'이전 게시글/공부 관련' 카테고리의 다른 글
  • [C++] fill, fill_n 배열을 초기화 하는 방법, 2차원, 3차원 배열 초기화
  • [C언어] 하샤드수 구하기, int 각 자릿수 더하기
  • [파이썬] 숫자 맞추기 게임 from random import randint
  • [파이썬] 숫자를 입력하고 각 자릿수 숫자를 더하는 프로그램
aptenia
aptenia
공부하면서 배운 것들
  • aptenia
    새벽의 아이디어
    aptenia
  • 전체
    오늘
    어제
    • 분류 전체보기 (276)
      • f1tenth (2)
      • 이전 게시글 (268)
        • 개발 관련 (25)
        • 정보 관련 (19)
        • 공부 관련 (224)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
    • 네이버 블로그
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    C언어강좌
    파이썬
    C언어
    c언어초보
    마크
    C++강좌
    반복하지않는수
    티스토리스킨편집
    마인크래프트
    이것이자바다연습문제
    스크롤바CSS
    이것이자바다확인문제
    파이어베이스
    자바
    컨텍스트스위칭
    티스토리HTML
    일본규슈공업대학교
    프로그래머스
    마인크래프트강화스크립트
    공개SW개발자대회
    백준
    마인크래프트스크립트
    안드로이드
    프로그래머스PCCE
    티스토리반응형2스킨편집
    이것이자바다
    캡스톤디자인
    콜라츠추측
    빅데이터공모전
    마크스크립트
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
aptenia
[파이썬] 달력 만들기 import turtle 사용 calendar 없이 만들기
상단으로

티스토리툴바