鱼C论坛

 找回密码
 立即注册
查看: 2494|回复: 8

[已解决]输入年份 算天干地支生肖

[复制链接]
发表于 2020-10-12 08:04:48 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
各位大神:在网上看到一段代码 输入年份 自动计算天干地支。
myyear = input('请输入年份:')
myyear = int(myyear)
tiangan_list =['甲','乙','丙','丁','戊','己','庚','辛','壬','癸']
dizhi_list =['子','丑','寅','卯','辰','巳','午','未','申','酉','戌','亥']
shengxiao_list =['鼠','牛','虎','兔','龙','蛇','马','羊','猴','鸡','狗','猪']
for i in range(myyear,myyear+12):
    tiangan =tiangan_list[(i-3) % 10-1]
    dizhi=dizhi_list[(i-3) % 12-1]
    shengxiao = shengxiao_list[(i % 12)-3-1]
    tgdz =tiangan+dizhi
    print(i,tgdz,shengxiao,sep=' ')

请问

tiangan =tiangan_list[(i-3) % 10-1]  这句代码中  为什么i-3?
shengxiao = shengxiao_list[(i % 12)-3-1]  这句代码 为啥i%12后 还要减去3 ?

不懂。
请各位指教
最佳答案
2020-10-12 09:40:53
之所以减3,是因为公元元年并不是甲子年,公元4年才是甲子年,所以在把公元年份转为天干地支纪年的时候要先减3。
先减3再求余,和先求余再减3结果是一样的。也就是说   (i % 12)-3  和  (i-3 )% 12  结果是一样的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-10-12 09:04:46 | 显示全部楼层
本帖最后由 风过无痕1989 于 2020-10-12 09:09 编辑

我不懂 Python ,但算天干时,月份是从3月份开始算的,1月及2月作为13月和14月

        天干地支纪年计算方法
  (1)将十天干、十二地支编号。如下:
  甲 乙 丙 丁 戊 己 庚 辛 壬 癸
  4 5 6 7 8 9 0 1 2 3
  子 丑 寅 卯 辰 巳 午 未 申 酉 戌 亥
  4 5 6 7 8 9 10 11 0 1 2 3
  (2)计算时,年最后一位的数对应天干的编号、用年数除以12,得到的余数对应地支的编号,合起来就是该年的干支纪年法。
  如2011年:最后一位是1,对应的天干的编号就是“辛”,再用2011除以12得到167余7,对应地支编号为“卯”合起来即2011年为“辛卯”年。

       生肖的计算方法: 诞生年代除以12,取余数.如果能整除,如果能整除,余数为零;按照下列数字表对应生肖动物:0 --猴、1--鸡、2--狗、3--猪、4--鼠、5--牛、6--虎、7--兔、8--龙、9--蛇、10--马、11--羊

       由于 0 对应的是猴,所以,要减法4,也就是你公式中的 (i % 12) - 3 - 1,这样对应的才是12生肖之首的鼠
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2020-10-12 09:40:53 | 显示全部楼层    本楼为最佳答案   
之所以减3,是因为公元元年并不是甲子年,公元4年才是甲子年,所以在把公元年份转为天干地支纪年的时候要先减3。
先减3再求余,和先求余再减3结果是一样的。也就是说   (i % 12)-3  和  (i-3 )% 12  结果是一样的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-10-12 10:08:56 From FishC Mobile | 显示全部楼层
sunrise085 发表于 2020-10-12 09:40
之所以减3,是因为公元元年并不是甲子年,公元4年才是甲子年,所以在把公元年份转为天干地支纪年的时候要先 ...

不一样,前者有负数的可能,而后者则没有
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-10-12 10:37:41 | 显示全部楼层
wp231957 发表于 2020-10-12 10:08
不一样,前者有负数的可能,而后者则没有

这里计算结果是有差别,我说的是对列表索引无差别
例如:输入14,(i % 12)-3-1 得到的是 -2 ,(i-3 )% 12-1  得到的是10,在长度为12 的列表中下标-2和下标10 索引的结果是一样的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-10-12 10:49:44 | 显示全部楼层
谢谢 大神们
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-10-12 10:51:05 | 显示全部楼层
sunrise085 发表于 2020-10-12 09:40
之所以减3,是因为公元元年并不是甲子年,公元4年才是甲子年,所以在把公元年份转为天干地支纪年的时候要先 ...

那为啥  tiangan =tiangan_list[(i-3) % 10-1]  中 还要减去1
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-10-12 10:57:07 | 显示全部楼层
xingdongadminer 发表于 2020-10-12 10:51
那为啥  tiangan =tiangan_list[(i-3) % 10-1]  中 还要减去1

列表是从0开始索引的,天干地支,年份都是从1开始的,所以需要减1,不减一的话,都会差一年,这个和那个减3是相似的道理
减3是因为天干地支与公元纪年起始点差三,减1是因为索引起始点与纪年起始点差一
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-10-12 11:07:04 | 显示全部楼层
谢谢 懂了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-18 09:42

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表