python万年历

# 用蔡勒(Zeller)公式
# # 即w=y+[y/4]+[c/4]-2c+[26(m+1)/10]+d-1
# # 公式中的符号含义如下,w:星期;c:世纪-1;y:年(两位数);m:月(m大于等于3,小于等于14,即在蔡勒公式中,某年的1、2月要看作上一年的13、14月来计算,比如2003年1月1日要看作2002年的13月1日来计算);d:日;[ ]代表取整,即只要整数部分。(C是世纪数减一,y是年份后两位,M是月份,d是日数。1月和2月要按上一年的13月和 14月来算,这时C和y均按上一年取值。)
# # 算出来的W除以7,余数是几就是星期几。如果余数是0,则为星期日。
# # 以2049年10月1日(100周年国庆)为例,用蔡勒(Zeller)公式进行计算,过程如下:

# # 蔡勒(Zeller)公式:w= y+ [y/4]+ [c/4]-   2c+ [26   (m+1) /10]+d-1
# # =                     49+[49/4]+[20/4]-2×20+[26× (10+1)/10]+1-1
# # =49+[12.25]+5-40+[28.6]
# # =49+12+5-40+28
# # =54 (除以7余5)
# # 即2049年10月1日(100周年国庆)是星期5。
import turtle
print("============================================")
print("‖                                         ‖")
print("‖         万 年 历 查 询 工 具           ‖")
print("‖                                        ‖")
print("‖                                         ‖")
print("============================================")
a = input("请输入一个年份:")
a = str(a)

a = a.zfill(4)


# a = "2019"


def qf_jsxq(dre):  # 星期计算
    c = int(dre[0:2])  # 世纪
    y = int(dre[2:4])  # 年的后两位数
    d = int(dre[6:8])  # 天数
    m1 = int(dre[4:6])  # 月份
    if m1 == 1:
        y = y - 1
        m = 13
    elif m1 == 2:
        y = y - 1
        m = 14
    else:
        m = m1
    w = (y + (y // 4) + (c // 4) - (2 * c) + ((26 * (m + 1)) // 10) + d - 1) % 7
    if w == 0:
        w = 6
    else:
        w = w - 1

    return w


def hb_tzzb(x, y):  # 坐标算法
    x1 = -537 + x  # 左上角x坐标
    y1 = 357 - y  # 左上角y坐标
    turtle.penup()  # 抬起画笔
    turtle.goto(x1, y1)  # 移动坐标


def bdrn(nf):  # 判断闰年
    aaaa = nf % 4
    b = nf % 100
    d = nf % 400
    if d == 0:
        return True
    elif aaaa == 0:
        if b == 0:
            return False
        else:
            return True
    else:
        return False


def 月天数判断函数(, 是否是闰年):
    if== 1 or== 3 or== 5 or== 7 or== 8 or== 10 or== 12:
        return 31
    elif== 2:
        if 是否是闰年:
            return 29
        else:
            return 28
    else:
        return 30


def gesguhuazifuchuan(a, y1, i):  # 格式化字符串
    nianfei = str(a)
    yuefen = str(y1)
    rifen = str(i)
    yuefen = yuefen.zfill(2)
    rifen = rifen.zfill(2)
    fanhui = nianfei + yuefen + rifen
    return fanhui


def scyf(y1, x, y):  # 输出月份
    yuanshix = x
    yuanshiy = y
    x_jiange = 20
    y_jiange = 20
    t1 = 月天数判断函数(y1, bdrn(int(a)))
    # t2 = [0] * t1
    print(gesguhuazifuchuan(a, y1, "1"))
    print(qf_jsxq(gesguhuazifuchuan(a, y1, "1")))
    diyizuobiaox = yuanshix + x_jiange * qf_jsxq(gesguhuazifuchuan(a, y1, "1"))
    xainxingzuobiaox = diyizuobiaox
    xainxingzuobiaoy = yuanshiy
    for i in range(t1):
        # t2[i] = i + 1
        hb_tzzb(xainxingzuobiaox, xainxingzuobiaoy)
        turtle.write("%2d" % (i + 1), align='left', font=("Microsoft YaHei", 10, "normal"))
        xainxingzuobiaox = xainxingzuobiaox + x_jiange
        if xainxingzuobiaox == yuanshix + x_jiange * 7:
            xainxingzuobiaox = yuanshix
            xainxingzuobiaoy = xainxingzuobiaoy + y_jiange
turtle.setup(1080, 720)  # 窗口大小 1080 x 720 像素
turtle.bgpic(r'D:/wnl.gif')  # 背景图片这个自己找一个,加地址
turtle.pencolor("white")  # 画笔颜色
hb_tzzb(540, 50)  # 移动坐标
turtle.write("  万  年  历", align='center', font=("Microsoft YaHei", 20, "normal"))
hb_tzzb(540, 80)
turtle.write("不忘初心", align='center', font=("Microsoft YaHei", 15, "normal"))
hb_tzzb(540, 150)
turtle.write(a + "年", align='center', font=("Microsoft YaHei", 20, "normal"))
xyuefenzb = 50
yyuefenzb = 220
for i in range(12):
    yuefen1 = ["一月", '二月', '三月', '四月', '五月', '六月', '七月', '八月', '九月', '十月', '十一月', '十二月']
    xingqi = ["一", "二", "三", "四", "五", "六", "日"]
    yfzb = (1080 - 100) // 6
    # print(yfzb)
    yfzby = (720) // 2
    # print(yfzby)
    hb_tzzb(xyuefenzb, yyuefenzb)
    turtle.write(yuefen1[i], align='left', font=("Microsoft YaHei", 16, "normal"))
    hb_tzzb(xyuefenzb, yyuefenzb + 28)
    turtle.write("一  二  三  四  五  六  日", align='left', font=("Microsoft YaHei", 10, "normal"))
    scyf(i + 1, xyuefenzb, yyuefenzb + 60)
    xyuefenzb = xyuefenzb + 163
    print("===================", xyuefenzb)

    if i == 5:  # 判断到六月了就换行
        xyuefenzb = 50
        yyuefenzb = yfzby + 70
turtle.hideturtle()  # 隐藏画笔
turtle.done()  # 阻止窗口自关闭

发布了30 篇原创文章 · 获赞 0 · 访问量 416

猜你喜欢

转载自blog.csdn.net/weixin_45736498/article/details/103984644