鱼C论坛

 找回密码
 立即注册
查看: 5349|回复: 29

[技术交流] Python:每日一题 32(答题领鱼币)

[复制链接]
发表于 2017-4-22 08:46:41 | 显示全部楼层 |阅读模式

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

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

x
感谢 冬雪雪冬 提供的题目



中国古代采用干支纪年法,即将天干和地支配合起来得到60个干支,将其对应每一年。60年一个轮回,成一个花甲。
要求输入年份给出相应的干支,输入干支,给出上一个和下一个同干支的年份,如果本年也是这个干支,则也显示出来。
例如:

  1. ============================ RESTART: D:/py/6.py ============================
  2. 输入年份,如2017,或干支,如丁酉:qw
  3. 输入错误!
  4. >>>
  5. ============================ RESTART: D:/py/6.py ============================
  6. 输入年份,如2017,或干支,如丁酉:2022
  7. 壬寅
  8. >>>
  9. ============================ RESTART: D:/py/6.py ============================
  10. 输入年份,如2017,或干支,如丁酉:己巳
  11. 上一个己巳年是1989
  12. 下一个己巳年是2049
  13. >>>
  14. ============================ RESTART: D:/py/6.py ============================
  15. 输入年份,如2017,或干支,如丁酉:丁酉
  16. 今年2017正好是丁酉年
  17. 上一个丁酉年是1957
  18. 下一个丁酉年是2077
复制代码


已知条件:
  1. tiangan = ['甲', '乙', '丙', '丁', '戊', '己', '庚', '辛', '壬', '癸']
  2. dizhi = ['子', '丑', '寅', '卯', '辰', '巳', '午', '未', '申', '酉', '戌', '亥']
复制代码





欢迎小伙伴们,一起答题!
如果你有能力,欢迎加入我们!
已经上车老司机:@冬雪雪冬 @lumber2388779 @ooxx7788 @gopythoner
点我上车
帅的人都上车了,而丑的人还在犹豫

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-4-22 13:25:17 | 显示全部楼层
本帖最后由 ooxx7788 于 2017-4-22 14:36 编辑
  1. """2017=丁酉年"""
  2. import time


  3. def w_to_e(year):
  4.     tiangan = ['甲', '乙', '丙', '丁', '戊', '己', '庚', '辛', '壬', '癸']
  5.     dizhi = ['子', '丑', '寅', '卯', '辰', '巳', '午', '未', '申', '酉', '戌', '亥']
  6.     year_std = 2017
  7.     tiangan_std = int(tiangan.index('丁'))
  8.     dizhi_std = int(dizhi.index('酉'))
  9.     temp = int(year) - year_std
  10.     tiangan_search = (temp + tiangan_std) % 10
  11.     dizhi_search = (temp + dizhi_std) % 12
  12.     ganzhi = f'{tiangan[tiangan_search]}{dizhi[dizhi_search]}'
  13.     return ganzhi


  14. def year_convert(year):
  15.     ganzhi = {}
  16.     for i in range(int(time.strftime('%Y')) - 30, int(time.strftime('%Y')) + 30):
  17.         ganzhi[w_to_e(i)] = i
  18.     try:
  19.         print(f'{year}是{w_to_e(year)}年!')
  20.         return w_to_e(year)
  21.     except:
  22.         if year in ganzhi.keys():
  23.             if ganzhi[year] > int(time.strftime('%Y')):
  24.                 print(f'上一个{year}年是{ganzhi[year]-60}年!')
  25.                 print(f'下一个{year}年是{ganzhi[year]}年!')
  26.             elif ganzhi[year] < int(time.strftime('%Y')):
  27.                 print(f'上一个{year}年是{ganzhi[year]}年!')
  28.                 print(f'下一个{year}年是{ganzhi[year]+60}年!')
  29.             else:
  30.                 print(f'今年{ganzhi[year]}正好是{year}年!')
  31.                 print(f'上一个{year}年是{ganzhi[year]-60}年!')
  32.                 print(f'下一个{year}年是{ganzhi[year]+60}年!')
  33.             return ganzhi[year]-60, ganzhi[year], ganzhi[year]+60
  34.         else:
  35.             print('输入错误!')


  36. if __name__ == '__main__':
  37.     year_convert(input('输入年份,如2017,或干支,如丁酉:'))
复制代码


先发个答案吧,后面再慢慢改。
更新了一下,现在输入公元年会返回一个对应的干支年,而输入一个干支年会返回一个公元年元组,而元组中间是最接近当前年份的公元年,两侧分别是上下60年。

输出:
  1. 输入年份,如2017,或干支,如丁酉:丁酉
  2. 今年2017正好是丁酉年!
  3. 上一个丁酉年是1957年!
  4. 下一个丁酉年是2077年!
复制代码
  1. 输入年份,如2017,或干支,如丁酉:1894
  2. 1894是甲午年!
复制代码
  1. 输入年份,如2017,或干支,如丁酉:甲子
  2. 上一个甲子年是1984年!
  3. 下一个甲子年是2044年!
复制代码
  1. 输入年份,如2017,或干支,如丁酉:今天的题目还不错!
  2. 输入错误!
复制代码

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
新手·ing + 3 + 3 太棒了!

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-4-23 23:15:19 | 显示全部楼层
才发现,这一题没有收录在你的淘贴里面。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-4-25 13:03:57 | 显示全部楼层
  1. tiangan = [ '庚', '辛', '壬', '癸','甲', '乙', '丙', '丁', '戊', '己']
  2. dizhi = ['申', '酉', '戌', '亥', '子', '丑', '寅', '卯', '辰', '巳', '午', '未',]
  3. def number(n):
  4.     di = n%12
  5.     tian = n%10
  6.     print(''.join([tiangan[tian],dizhi[di]]))

  7.          
  8. def hanzi(n):
  9.     years = 2017
  10.     beishu  = years//12
  11.     global num1 ,num2
  12.     for each in range(-2,3):#这种判断不是很好,我再想想其他判断方法
  13.         num1 = (beishu  + each )*12 + dizhi.index(n[1])
  14.         count = num1%10
  15.         if count == tiangan.index(n[0]):
  16.             break
  17.     if num1 < years:
  18.         num2 = num1 + 60
  19.     elif num1 == years:
  20.         num2 =num1 + 60
  21.         num1 = years - 60
  22.         print('今年2017正好是丁酉年')
  23.     else:
  24.         num2 = num1
  25.         num1 = num2 - 60
  26.     return num1,num2

  27. temp = input('输入年份,如2017,或干支,如丁酉:')
  28. temp1 = temp

  29. try:
  30.     if temp.isdigit() == True:
  31.         temp = int(temp)
  32.         number(temp)
  33.     else:
  34.         list(temp1)
  35.         if temp1[0] in tiangan and temp1[1] in dizhi:
  36.             hanzi(temp1)
  37.             print('上一个{0}年是{1}'.format(temp, num1))
  38.             print('下一个{0}年是{1}'.format(temp, num2))
  39.         else:
  40.             print('输入错误!')
  41. except:
  42.     print('输入错误!')
复制代码

我是来凑答案的。。干支判断有待完善,还有我的tiangen 和dizhi的列表有稍微改动一下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-4-28 19:37:19 | 显示全部楼层
本帖最后由 余欲渔 于 2017-4-28 20:05 编辑
  1. tiangan = ['甲', '乙', '丙', '丁', '戊', '己', '庚', '辛', '壬', '癸']*6
  2. dizhi = ['子', '丑', '寅', '卯', '辰', '巳', '午', '未', '申', '酉', '戌', '亥']*5
  3. gz=[tiangan[i]+dizhi[i] for i in range(60)]
  4. while True:
  5.     x=input('输入年份或干支:')
  6.     if x in gz:
  7.         print(gz.index(x)+1924,gz.index(x)+1984,gz.index(x)+2044)
  8.     else:
  9.         print(gz[int(x)%60-4])
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2017-6-17 18:16:40 | 显示全部楼层
为了判断打印时间,要把今年输入,默认关键字参数 n=2017
  1. # 试试直接把所有干支弄出来,这样程序应该简单多了
  2. tiangan = ['甲', '乙', '丙', '丁', '戊', '己', '庚', '辛', '壬', '癸']
  3. dizhi = ['子', '丑', '寅', '卯', '辰', '巳', '午', '未', '申', '酉', '戌', '亥']
  4. ganzi = list(zip(tiangan*6,dizhi*5))

  5. def gz_print(year, now=2017):
  6.     """输入年份或干支(字符串),打印相应日期信息,可传入现在年份(默认现在时间2017年)"""
  7.     jiazi = 4 # 用公元后第一个甲子年做计算基础
  8.    
  9.     if tuple(year) in ganzi:
  10.         # 根据是不是正好今年,控制 target 打印范围
  11.         extra = 0
  12.         # 计算出来的是现在这一轮干支年,分‘过去、正在、未来’三种情况打印
  13.         target = ganzi.index(tuple(year)) +jiazi +(now-jiazi)//60*60
  14.         if target > now:
  15.             target -= 60
  16.         elif target == now:
  17.             extra = -60
  18.             print("今年 %d 正好是 %s 年" %(now, year))
  19.         else:
  20.             pass
  21.         print("上一个 %s 是 %d " %(year, target+ extra))
  22.         print("上一个 %s 是 %d " %(year, target+60))
  23.     elif year.isdigit():
  24.         # 减去甲子年再 %60 得出索引号,解包打印
  25.         print(*ganzi[(int(year) - jiazi) %60])
  26.     else:
  27.         print("输入错误,亲!")

  28. n = input("请输入年份,如‘2017’ ,或干支,如‘丁酉’:")
  29. gz_print(n)
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-9-20 11:48:48 | 显示全部楼层
tiangan = ['甲', '乙', '丙', '丁', '戊', '己', '庚', '辛', '壬', '癸']
dizhi = ['子', '丑', '寅', '卯', '辰', '巳', '午', '未', '申', '酉', '戌', '亥']
year1 = 2017
tiandi1 = 34
tmp = input('输入年份,如2017,或干支,如丁酉:')
if tmp.isdigit():
    num = int(tmp) - year1
    tiandi = (tiandi1 + num)%60
    num1 = tiandi //10
    num2 = tiandi %10
    a2,b2 = tiangan[num2-1],dizhi[(num2+num1*10)%12-1]
    print(a2,b2,sep='')
else:
    a1,b1  = [i for i in tmp]
    num1 = tiangan.index(a1)-dizhi.index(b1)
    if num1 >= 0:
        num2 = num1 //2*10+tiangan.index(a1)+1
    else:
        num2 = (num1+12)//2*10+tiangan.index(a1)+1
    num3 = num2 - 34
    if num3 < 0:
        print('上一个{0}年是{1}'.format(tmp, 2017+num3))
        print('下一个{0}年是{1}'.format(tmp, 2017+num3+60))
    else:
        print('上一个{0}年是{1}'.format(tmp, 2017+num3-60))
        print('下一个{0}年是{1}'.format(tmp, 2017+num3))  
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-9-24 13:21:48 | 显示全部楼层
  1. # -*- coding utf-8 -*-

  2. import time
  3. tiangan = ['甲', '乙', '丙', '丁', '戊', '己', '庚', '辛', '壬', '癸']
  4. dizhi = ['子', '丑', '寅', '卯', '辰', '巳', '午', '未', '申', '酉', '戌', '亥']
  5. now = int(time.strftime("%Y"))

  6. def Get_Tian_Zhi(year):
  7.     s = tiangan[year % 10 - 3] + dizhi[year % 12 - 3]
  8.     print s.decode('utf-8')

  9. def Get_Year_By_TianZhi(tianzhi):
  10.     tmp1 = tianzhi[0] + 3
  11.     tmp2 = tianzhi[1] + 3
  12.     list_year = []
  13.     years = []

  14.     for i in range(100, 300):
  15.         for j in range(100, 300):
  16.             if i * 10 + tmp1 == j * 12 + tmp2:
  17.                 list_year.append(j * 12 + tmp2)

  18.     for each in list_year:
  19.         if abs(each - now) <= 60:
  20.             years.append(each)

  21.     return years
  22.         
  23. year = int(raw_input("Enter the year: "))   
  24. Get_Tian_Zhi(year)

  25. tiangan = int(raw_input("Enter the tiangan: "))
  26. dizhi = int(raw_input("Enter the dizhi: "))
  27. tianzhi = [tiangan, dizhi]
  28. print Get_Year_By_TianZhi(tianzhi)
复制代码

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-11-20 20:45:47 | 显示全部楼层
看到楼上这么长的代码,不敢回答了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-12-2 00:14:09 | 显示全部楼层
  1. from datetime import datetime

  2. tiangan = ['甲', '乙', '丙', '丁', '戊', '己', '庚', '辛', '壬', '癸']
  3. dizhi = ['子', '丑', '寅', '卯', '辰', '巳', '午', '未', '申', '酉', '戌', '亥']


  4. # 已知2017年是丁酉年
  5. allGanzhi = []
  6. for number in range(0, 60):
  7.     gan = tiangan[number%10]
  8.     zhi = dizhi[number%12]
  9.     allGanzhi.append(gan+zhi)
  10. # 丁酉年的index
  11. indexOfDingyou = allGanzhi.index('丁酉')
  12. currentYear = datetime.now().year

  13. def judgeYear(ganzhi):
  14.     if judgeGanzhi(currentYear) == ganzhi:
  15.         print('今年%d年正好是%s年!' % (currentYear, ganzhi))
  16.         print('上一个%s年是%d年!' % (ganzhi, currentYear-60))
  17.         print('下一个%s年是%d年!' % (ganzhi, currentYear+60))
  18.     else:
  19.         ganzhiOfCurrentYear = judgeGanzhi(currentYear)
  20.         indexOfCurrentYearGanzhi = allGanzhi.index(ganzhiOfCurrentYear)
  21.         indexOfRequestedGanzhi = allGanzhi.index(ganzhi)
  22.         sub = indexOfCurrentYearGanzhi - indexOfRequestedGanzhi
  23.         lastOrNextYear = currentYear - sub
  24.         if lastOrNextYear > currentYear:
  25.             nextYear = lastOrNextYear
  26.             lastYear = nextYear - 60
  27.         else:
  28.             lastYear = lastOrNextYear
  29.             nextYear = lastYear + 60

  30.         print('上一个%s年是%d年!' % (ganzhi, lastYear))
  31.         print('下一个%s年是%d年!' % (ganzhi, nextYear))
  32.    
  33. def judgeGanzhi(year):
  34.     return allGanzhi[(year+indexOfDingyou-2017)%60]

  35. inputYearOrGanzhi = input('输入年份,如2017,或干支,如丁酉:')
  36. if inputYearOrGanzhi in allGanzhi:
  37.     judgeYear(inputYearOrGanzhi)
  38. elif inputYearOrGanzhi.isdigit() and int(inputYearOrGanzhi) > 0:
  39.     print('%s年是%s年!' % (inputYearOrGanzhi, judgeGanzhi(int(inputYearOrGanzhi))))
  40. else:
  41.     print('输入错误!')


  42. # 结果完美。只是不能判断公元前的。
  43. # 硬要写也可以,只是懒得改了,就是这么个意思。
  44. >>>
  45. 输入年份,如2017,或干支,如丁酉:戊戌
  46. 上一个戊戌年是1958年!
  47. 下一个戊戌年是2018年!
  48. >>> ================================ RESTART ================================
  49. >>>
  50. 输入年份,如2017,或干支,如丁酉:甲子
  51. 上一个甲子年是1984年!
  52. 下一个甲子年是2044年!
  53. >>> ================================ RESTART ================================
  54. >>>
  55. 输入年份,如2017,或干支,如丁酉:丁酉
  56. 今年2017年正好是丁酉年!
  57. 上一个丁酉年是1957年!
  58. 下一个丁酉年是2077年!
  59. >>> ================================ RESTART ================================
  60. >>>
  61. 输入年份,如2017,或干支,如丁酉:1985
  62. 1985年是乙丑年!
  63. >>> ================================ RESTART ================================
  64. >>>
  65. 输入年份,如2017,或干支,如丁酉:1
  66. 1年是辛酉年!
  67. >>> ================================ RESTART ================================
  68. >>>
  69. 输入年份,如2017,或干支,如丁酉:0
  70. 输入错误!
  71. >>> ================================ RESTART ================================
  72. >>>
  73. 输入年份,如2017,或干支,如丁酉:辛亥
  74. 上一个辛亥年是1971年!
  75. 下一个辛亥年是2031年!
  76. >>> ================================ RESTART ================================
  77. >>>
  78. 输入年份,如2017,或干支,如丁酉:1911
  79. 1911年是辛亥年!
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-12 13:45:03 | 显示全部楼层
  1. tiangan = ['甲', '乙', '丙', '丁', '戊', '己', '庚', '辛', '壬', '癸']
  2. dizhi = ['子', '丑', '寅', '卯', '辰', '巳', '午', '未', '申', '酉', '戌', '亥']

  3. def fun(n):
  4.     td=[tiangan[i%10]+dizhi[i%12] for i in range(60)]
  5.     return td[(n-3)%60-1]

  6. if __name__=="__main__":
  7.     fun(2017)
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-4-5 16:48:06 | 显示全部楼层
def calculate(year = 2018, tiangan_dizhi ="戊戌"):
    tiangan = ['甲', '乙', '丙', '丁', '戊', '己', '庚', '辛', '壬', '癸']
    dizhi = ['子', '丑', '寅', '卯', '辰', '巳', '午', '未', '申', '酉', '戌', '亥']
    if year != 2018:
        tiangan_index = (year - 4)%10
        dizhi_index = (year - 4)%12
        #tiangan_dizhi = ""
        tiangan_dizhi = tiangan[tiangan_index] + dizhi[dizhi_index]
        print(tiangan_dizhi)
        return tiangan_dizhi
    else:
        tiangan_index = list(tiangan_dizhi)[0]
        dizhi_index = list(tiangan_dizhi)[1]
        
        tiangan_index = tiangan.index(tiangan_index)
        dizhi_index = dizhi.index(dizhi_index)
        year_list = []

        for year in range(1900, 2060):
            tiangan_num = (year - 4)%10
            dizhi_num = (year - 4)%12
            if tiangan_num == tiangan_index and dizhi_num == dizhi_index:
                year_list.append(year)
        print(year_list)
        print("上一个%s年是%d"%(tiangan_dizhi, year_list[-2]))
        print("下一个%s年是%d"%(tiangan_dizhi, year_list[-1]))        
        #year = tiangan_index*
        #print(tiangan_num, dizhi_num)
while True:
    num = input("输入年份,如2017,或干支,如丁酉:")
    if num.isdigit():
        calculate(year = int(num))
    else:
        calculate(tiangan_dizhi = num)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-4-11 16:18:44 | 显示全部楼层
'''计算方法还要百度科普。。。深觉自己没文化。。。
计算以及推算
万年历查知1995年为乙亥年。
用1995年的尾数查得知为乙,用年份(1995年)除以12的余数为3查表的知3为亥,所以1995年为乙亥年。具体的算法如下:
先用年份的尾数查出天干,如2013年 3为癸;再用2013年除以12余数为9,9为巳。那么2013年就是癸巳年了。
天干        甲        乙        丙        丁        戊        己        庚        辛        壬        癸               
        4        5        6        7        8        9        0        1        2        3               
地支        子        丑        寅        卯        辰        巳        午        未        申        酉        戌        亥
        4        5        6        7        8        9        10        11        12        1        2        3'''
  1. tiangan = ['庚', '辛', '壬', '癸','甲', '乙', '丙', '丁', '戊', '己']
  2. dizhi = ['申', '酉', '戌', '亥','子', '丑', '寅', '卯', '辰', '巳', '午', '未']

  3. year = input('输入年份,如2017,或干支,如丁酉:')
  4. n = 0
  5. if year.isnumeric():
  6.         x = int(year[-1])
  7.         y = int(year) % 12
  8.         out_year = tiangan[x] + dizhi[y]
  9.         print(out_year)

  10. elif year[0] in tiangan and year[1] in dizhi:
  11.         for i in range(1957,2078):
  12.                 if tiangan.index(year[0]) == int(str(i)[-1]) and i % 12 == dizhi.index(year[1]) and i == 2017:
  13.                         print('今年%s年正好是%s' % (i,year))
  14.                 elif tiangan.index(year[0]) == int(str(i)[-1]) and i % 12 == dizhi.index(year[1]) and n == 0:
  15.                         print('上一个%s年是%s' % (year,i))
  16.                         n += 1
  17.                 elif tiangan.index(year[0]) == int(str(i)[-1]) and i % 12 == dizhi.index(year[1]) and n == 1:
  18.                         print('下一个%s年是%s' % (year,i))
  19. else:
  20.         print('输入格式错误')
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-4-11 18:34:56 | 显示全部楼层
本帖最后由 凌九霄 于 2018-4-12 09:10 编辑
  1. tiangan = ['甲', '乙', '丙', '丁', '戊', '己', '庚', '辛', '壬', '癸']
  2. dizhi = ['子', '丑', '寅', '卯', '辰', '巳', '午', '未', '申', '酉', '戌', '亥']

  3. rebirth = list(map(lambda x: x[0] + x[1], list(zip(tiangan * 6, dizhi * 5))))

  4. import time


  5. def calendar(year):
  6.     if year.isdigit():
  7.         if int(year) >= 2017:
  8.             years = int(year) % 2017 % 60 - 60
  9.         else:
  10.             years =  0 - 2017 % int(year) % 60
  11.         return rebirth[rebirth.index('丁酉') + years]
  12.     else:
  13.         nf = 2017 + rebirth.index(year) - rebirth.index('丁酉')
  14.         return str(nf)


  15. while True:
  16.     lstr = input("\n请输入年份,如2017 或干支,如丁酉:【输入Q退出】")
  17.     if lstr.isdigit():
  18.         print("{0}年的干支纪年:{1}".format(lstr, calendar(lstr)))
  19.     elif lstr in rebirth:
  20.         nf = calendar(lstr)
  21.         if nf == time.strftime("%Y", time.localtime()):
  22.             print("今年{0}正好是{1}年".format(calendar(lstr), lstr))

  23.         print("上一个{0}年是:{1}年".format(lstr, str(int(nf) - 60)))
  24.         print("下一个{0}年是:{1}年".format(lstr, str(int(nf) + 60)))
  25.     elif lstr == 'Q':
  26.         break
  27.     else:
  28.         print("\n输入有误,请重新输入...")
复制代码

360截图20180412090933717.jpg
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2018-5-24 22:39:39 | 显示全部楼层
6666完美复现
  1. import datetime

  2. x = input('输入年份,如2017:')
  3. tiangan = ['庚', '辛', '壬', '癸', '甲', '乙', '丙', '丁', '戊', '己']
  4. dizhi = ['酉', '戌', '亥', '子', '丑', '寅', '卯', '辰', '巳', '午', '未', '申']
  5. dic = { '甲子':1984,'甲戌':1994,'甲申':2004,'甲午':2014,'甲辰':2024,'甲寅':2034,\
  6.         '乙丑':1985,'乙亥':1995,'乙酉':2005,'乙未':2015,'乙巳':2025,'乙卯':2035,\
  7.         '丙寅':1986,'丙子':1996,'丙戌':2006,'丙申':2016,'丙午':2026,'丙辰':2036,\
  8.         '丁卯':1987,'丁丑':1997,'丁亥':2007,'丁酉':2017,'丁未':2027,'丁巳':2037,\
  9.         '戊辰':1988,'戊寅':1998,'戊子':2008,'戊戌':2018,'戊申':2028,'戊午':2038,\
  10.         '己巳':1989,'己卯':1999,'己丑':2009,'己亥':2019,'己酉':2029,'己未':2039,\
  11.         '庚午':1990,'庚辰':2000,'庚寅':2010,'庚子':2020,'庚戌':2030,'庚申':2040,\
  12.         '辛未':1991,'辛巳':2001,'辛卯':2011,'辛丑':2021,'辛亥':2031,'辛酉':2041,\
  13.         '壬申':1992,'壬午':2002,'壬辰':2012,'壬寅':2022,'壬子':2032,'壬戌':2042,\
  14.         '癸酉':1993,'癸未':2003,'癸巳':2013,'癸卯':2023,'癸丑':2033,'癸亥':2043}

  15. cur_year = datetime.datetime.now().year
  16. if x in dic.keys():
  17.     if int(dic[x]) == cur_year:
  18.         print('今年%d年刚好是%s年!'%(cur_year,x))
  19.         print('上一个%s年是%d年!'%(x,int(dic[x])-60))
  20.         print('下一个%s年是%d年!'%(x,int(dic[x])+60))
  21.     elif int(dic[x]) < cur_year:
  22.         print('上一个%s年是%d年!'%(x,int(dic[x])))
  23.         print('下一个%s年是%d年!'%(x,int(dic[x])+60))
  24.     else:
  25.         print('上一个%s年是%d年!'%(x,int(dic[x])-60))
  26.         print('下一个%s年是%d年!'%(x,int(dic[x])))
  27. elif x.isdigit():
  28.     x = int(x)
  29.     a = x % 10
  30.     b = x % 12
  31.     print('%c%c'%(tiangan[a],dizhi[b-1]))
  32. else:
  33.     print('输入错误!')
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-5-27 00:56:35 | 显示全部楼层
import datetime

cur_year = datetime.datetime.now().year


tiangan = ['甲', '乙', '丙', '丁', '戊', '己', '庚', '辛', '壬', '癸']
dizhi = ['子', '丑', '寅', '卯', '辰', '巳', '午', '未', '申', '酉', '戌', '亥']
nian = []
i = -1
n = -1
while True:
    i += 1
    n += 1
    x = tiangan[i] + dizhi[n]
    if i == 9:
        i = -1
    if n == 11:
        n = -1
   
    nian.append(x)
   
    if len(nian) == 60:
        break
try:
    while True:
        w = input('请输入查询的年份: 如2018 或干支 如甲子:')
        print('输入 "q" 退出')
        if w in nian:
            p = int(nian.index(w)) + 4
            y = cur_year % 60
            print('上一个' + w + '年是:' + str(cur_year - (y -p)))
            print('下一个' + w + '年是:' + str(cur_year + (y -p)))
        elif w == 'q':
            break
        else:
            n = (int(w)) % 60 - 4
            print(nian[n])
except ValueError:
    print('请按套路出牌')
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-5-27 01:11:54 | 显示全部楼层
import datetime

cur_year = datetime.datetime.now().year


tiangan = ['甲', '乙', '丙', '丁', '戊', '己', '庚', '辛', '壬', '癸']
dizhi = ['子', '丑', '寅', '卯', '辰', '巳', '午', '未', '申', '酉', '戌', '亥']
nian = []
i = -1
n = -1
while True:
    i += 1
    n += 1
    x = tiangan[i] + dizhi[n]
    if i == 9:
        i = -1
    if n == 11:
        n = -1
   
    nian.append(x)
   
    if len(nian) == 60:
        break

while True:
    w = input('请输入查询的年份: 如2018 或干支 如甲子:')
    print('输入 "q" 退出')
    try:
        if w in nian:
            p = int(nian.index(w)) + 4
            y = cur_year % 60
            print('上一个' + w + '年是:' + str(cur_year - (y -p)))
            print('下一个' + w + '年是:' + str(cur_year + (y -p)))
        elif w == 'q':
            break
        elif type(int(w)) == int:
            n = (int(w)) % 60 - 4
            print(nian[n])
        else:
            print('请按套路出牌')
    except ValueError:
        print('请按套路出牌')
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-5-27 01:12:35 | 显示全部楼层
import datetime

cur_year = datetime.datetime.now().year


tiangan = ['甲', '乙', '丙', '丁', '戊', '己', '庚', '辛', '壬', '癸']
dizhi = ['子', '丑', '寅', '卯', '辰', '巳', '午', '未', '申', '酉', '戌', '亥']
nian = []
i = -1
n = -1
while True:
    i += 1
    n += 1
    x = tiangan[i] + dizhi[n]
    if i == 9:
        i = -1
    if n == 11:
        n = -1
   
    nian.append(x)
   
    if len(nian) == 60:
        break

while True:
    w = input('请输入查询的年份: 如2018 或干支 如甲子:')
    print('输入 "q" 退出')
    try:
        if w in nian:
            p = int(nian.index(w)) + 4
            y = cur_year % 60
            print('上一个' + w + '年是:' + str(cur_year - (y -p)))
            print('下一个' + w + '年是:' + str(cur_year + (y -p)))
        elif w == 'q':
            break
        elif type(int(w)) == int:
            n = (int(w)) % 60 - 4
            print(nian[n])
        else:
            print('请按套路出牌')
    except ValueError:
        print('请按套路出牌')
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-5-27 01:15:38 | 显示全部楼层
import datetime

cur_year = datetime.datetime.now().year


tiangan = ['甲', '乙', '丙', '丁', '戊', '己', '庚', '辛', '壬', '癸']
dizhi = ['子', '丑', '寅', '卯', '辰', '巳', '午', '未', '申', '酉', '戌', '亥']
nian = []
i = -1
n = -1
while True:
    i += 1
    n += 1
    x = tiangan[i] + dizhi[n]
    if i == 9:
        i = -1
    if n == 11:
        n = -1
   
    nian.append(x)
   
    if len(nian) == 60:
        break

while True:
    w = input('请输入查询的年份: 如2018 或干支 如甲子:')
    print('输入 "q" 退出')
    try:
        if w in nian:
            p = int(nian.index(w)) + 4
            y = cur_year % 60
            print('上一个' + w + '年是:' + str(cur_year - (y -p)))
            print('下一个' + w + '年是:' + str(cur_year + (y -p)))
        elif w == 'q':
            break
        elif type(int(w)) == int:
            n = (int(w)) % 60 - 4
            print(nian[n])
        else:
            print('请按套路出牌')
    except ValueError:
        print('请按套路出牌')
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-6-24 17:27:16 | 显示全部楼层
  1. import datetime
  2. tiangan = ['甲', '乙', '丙', '丁', '戊', '己', '庚', '辛', '壬', '癸']
  3. dizhi = ['子', '丑', '寅', '卯', '辰', '巳', '午', '未', '申', '酉', '戌', '亥']
  4. td=[]
  5. s1= 0
  6. s2= 0
  7. while True:
  8.     if s1>=len(tiangan):
  9.         s1=0
  10.     if s2>=len(dizhi):
  11.         s2=0
  12.     SS=tiangan[s1]+dizhi[s2]
  13.     if SS not in td:
  14.         td.append(SS)
  15.     else:
  16.         break
  17.     s1+=1
  18.     s2+=1
  19. while True:
  20.     data = input('输入年份,如2017,或干支,如丁酉:')
  21.     t=data.isdigit()
  22.     if data in td or (t and isinstance(int(data),int)):
  23.         break
  24.     else:
  25.         print('输入错误')
  26. def yearToganzhi(data):
  27.     n = int(data)%10-3
  28.     m = int(data)%12-3
  29.     if n>0:
  30.         gan = tiangan[n-1]
  31.     else:
  32.         gan=tiangan[n-1+10]
  33.     if m>0:
  34.         zhi = dizhi[m-1]
  35.     else:
  36.         zhi = dizhi[m-1+12]
  37.     result = gan+zhi
  38.     return result
  39. def ganzhiToyear(data):
  40.     datanow = datetime.datetime.now().year
  41.     ganzhinow = yearToganzhi(datanow)
  42.     index1 = td.index(ganzhinow)
  43.     index2 = td.index(data)
  44.     if ganzhinow==data:
  45.         yearl= datanow - 60
  46.         yearn= datanow + 60
  47.     elif index1>index2:
  48.         yearl = datanow -(index1-index2)
  49.         yearn = datanow-(index1-index2)+60
  50.     else:
  51.         yearl=datanow+(index2-index1)-60
  52.         yearn=datanow+(index2-index1)
  53.     return (ganzhinow,yearl,yearn)
  54. if t:
  55.     print(yearToganzhi(data))
  56. else:
  57.     a,b,c=ganzhiToyear(data)
  58.     if a == data:
  59.         print('今年%d的正好是%s年'%(datetime.datetime.now().year,data))
  60.         print('上一个%s年是%d'%(data,b))
  61.         print('下一个%s年是%d'%(data,c))
  62.     else:
  63.         print('上一个%s年是%d'%(data,b))
  64.         print('下一个%s年是%d'%(data,c))
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-20 11:47

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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