# 用蔡勒(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() # 阻止窗口自关闭
python万年历
最新推荐文章于 2024-03-24 09:43:05 发布