'''
中国农历算法
很多人只知道农历是用十天支(甲、乙、丙、丁、戊、己、庚、辛、壬、癸)和十二地干(子、丑、寅、卯、辰、巳、午、未、申、酉、戌、亥)相配对来标定的,但不知道相配的方法。本文对这相配的方法进行深入浅出的介绍,并制作成Python模块。
首先要知道农历虽然用天支地干来标定,但并不是天支与地干的数学组合。事实上,天支和地干互不相干循环标识年份,这样天支年份的周期是10年;地干年份的周期是12年。
其次,每过10的整数年,天支年份就和原来的一样;每过12的整数年,地干年份就和原来的一样。过6次10年就是60年,天支年份是原来的一样;过5次12年也是60年,地干年份是原来的一样。就是说天支地干年的周期是60年(10与12的最小公倍数)。
最后,农历历史悠久,具体从那年开始计算难以考究,但有一点是确定的,开始计算的那一年是甲子年。这样,每隔60年就会有一个甲子年。最近的甲子年对应的是公元1984年。这样就提供了一个简单的算法:公元年数减1984的差,除以10的余数(如为负数加10)对应天支年份(从0开始);除以12的余数(如为负数加12)对应地干年份(从0开始)。
'''
#一个甲子年
jz = 1984
#天支
tz = ['甲','乙','丙','丁','戊','己','庚','辛','壬','癸']
#地干
dg = [('子','鼠'),('丑','牛'),('寅','虎'),('卯','兔'),('辰','龙'),('巳','蛇'),('午','马'),('未','羊'),('申','猴'),('酉','鸡'),('戌','狗'),('亥','猪')]
while True:
try:
gln = int(input("请输入查询年份的对应公元年份:"))
except ValueError:
print("请输入1个整数!")
continue
if gln<1 or gln>10000:
print("请输入1到10000的整数!")
continue
#与甲子年的差
jzc = gln - jz
#天支年份
tzn = jzc % 10
if tzn < 0:
tzn += 10
#地干年份
dgn = jzc % 12
if dgn < 0:
dgn += 12
#输出农历年份
print("公元%d年对应的农历是%s%s年(%s年)。" % (gln, tz[tzn], dg[dgn][0], dg[dgn][1]))
'''
把这个文章全选复制到一个Python文件(.py)中运行,结果如下:
'''