鱼C论坛

 找回密码
 立即注册
查看: 9429|回复: 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
点我上车
帅的人都上车了,而丑的人还在犹豫

本帖被以下淘专辑推荐:

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-12-16 09:06:47 | 显示全部楼层
学习
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2019-12-5 09:14:21 | 显示全部楼层
import time
def fun32():
     Tiangan = {3:"甲",4:"乙",5:"丙",6:"丁",7:"戊",8:"己",9:"庚",0:"辛",1:"壬",2:"癸"}
     DiZhi = {3:"子",4:"丑",5:"寅",6:"卯",7:"辰",8:"巳",9:"午",10:"未",11:"申",0:"酉",1:"戌",2:"亥"}
     ShengXiao = {"子":"鼠","丑":"牛","寅":"虎","卯":"兔","辰":"龙","巳":"蛇","午":"马","未":"羊","申":"猴","酉":"鸡","戌":"狗","亥":"猪"}
     Jiazibiao = {1:"甲子", 11:"甲戌", 21:"甲申",31:"甲午",41:"甲辰",51:"甲寅",
                  2:"乙丑",12:"乙亥",22:"乙酉",32:"乙未",42:"乙巳",52:"乙卯",
                  3:"丙寅",13:"丙子",23:"丙戌",33:"丙申",43:"丙午",53:"丙辰",
                  4:"丁卯",14:"丁丑",24:"丁亥",34:"丁酉",44:"丁未",54:"丁巳",
                  5:"戊辰",15:"戊寅",25:"戊子",35:"戊戌",45:"戊申",55:"戊午",
                  6:"己巳",16:"己卯",26:"己丑",36:"己亥",46:"己酉",56:"己未",
                  7:"庚午",17:"庚辰",27:"庚寅",37:"庚子",47:"庚戌",57:"庚申",
                  8:"辛未",18:"辛巳",28:"辛卯",38:"辛丑",48:"辛亥",58:"辛酉",
                  9:"壬申",19:"壬午",29:"壬辰",39:"壬寅",49:"壬子",59:"壬戌",
                  10:"癸酉",20:"癸未",30:"癸巳",40:"癸卯",50:"癸丑",60:"癸亥"}
     localtime = time.asctime( time.localtime(time.time()))
     LCurrentYear=localtime.split(" ")
     CurrentYear=LCurrentYear[len(LCurrentYear)-1]
     Year = str(input("请输入年份:"))
     Tian = Tiangan[int(Year[len(Year)-1])]
     Di = DiZhi[int(Year) % 12]
     ShuXiang = ShengXiao[Di]
     print("公元%s是黄历的%s年。属相是%s" % (Year,Tian+Di,ShuXiang))
     GanZi = input("请输入干子:")
     if GanZi in Jiazibiao.values():
         for key in Jiazibiao.keys():
             if Jiazibiao[key]== GanZi:
                 GanZiindex = key
                 break
         
     else:
         print("输入干子不对")
         
     Year = CurrentYear
     Tian = Tiangan[int(Year[len(Year)-1])]
     Di = DiZhi[int(Year) % 12]
     CurrentYearGanZi=Tian+Di
     for key1 in Jiazibiao.keys():
         if Jiazibiao[key1]== CurrentYearGanZi:
             CurrentYearGanZiindex = key1
             break
     if CurrentYearGanZi==GanZi:
        print("上一个%s年是%d.下一个%s年时%d.本年%d也是%s年" % (GanZi,int(Year)-60,GanZi,int(Year)+60,int(CurrentYear),GanZi))
     else:
          print("上一个%s年是%d.下一个%s年时%d." % (GanZi,int(Year)-(CurrentYearGanZiindex-GanZiindex),GanZi,int(Year)-(CurrentYearGanZiindex-GanZiindex)+60))
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-8-22 20:51:19 | 显示全部楼层
本帖最后由 panheng 于 2019-8-22 20:53 编辑
  1. import re
  2. tiangan = ['甲', '乙', '丙', '丁', '戊', '己', '庚', '辛', '壬', '癸']
  3. dizhi = ['子', '丑', '寅', '卯', '辰', '巳', '午', '未', '申', '酉', '戌', '亥']
  4. dict1 = dict()
  5. list1 = []
  6. for year in range(0, 60):                            #创建出检索天干字典
  7.     result = tiangan[year % 10] + dizhi[year % 12]
  8.     list1.append(result)
  9.     dict1[year] = result

  10. str1 = input("请输入需要查询的年份或干支(例如:2019、戊戌):")
  11. today = 2017                                      # 定义检索起点
  12. while True:
  13.     if re.match(r'^\d+,str1):                   # 正则表达式检索如果输入的为年份
  14.         key = (int(str1) - 4) % 60                # 2019年为己亥  对应 35  将输入年份余60后,反差得出检索值为(年份-4)
  15.         print(dict1[key])
  16.         break
  17.     if str1 in list1:                             # 列表检索如果输入的为干支
  18.         this_year = (dict1[(today-4) % 60])
  19.         if str1 == this_year:                     # 如果正好为本年干支
  20.             print("今年%s正好是 %s 年" % (today, this_year))
  21.             print('上一个 %s 年是 %s 年' % (this_year, today - 60))
  22.             print('下一个 %s 年是 %s 年' % (this_year, today + 60))
  23.         else:                                     # while 循环查找符合年份
  24.             n = today
  25.             while str1 != dict1[(n - 4) % 60]:
  26.                 n += 1
  27.             print("上一个 %s 年是 %s 年" % (str1, n-60))
  28.             print("下一个 %s 年是 %s 年" % (str1, n))
  29.         break
  30.     else:
  31.         str1 = input("输入错误!请输入年份或干支(例如:2019、戊戌):")
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-3-18 17:06:10 | 显示全部楼层
  1. import datetime

  2. tg = ['甲', '乙', '丙', '丁', '戊', '己', '庚', '辛', '壬', '癸'] * 6
  3. dz = ['子', '丑', '寅', '卯', '辰', '巳', '午', '未', '申', '酉', '戌', '亥'] * 5
  4. gz = [tg[i]+dz[i] for i in range(60)]


  5. def tianzhi(year):
  6.     if year in gz:
  7.         now_y = datetime.datetime.now().year
  8.         now_gz = gz[(now_y - 1984) % 60]
  9.         ix1 = gz.index(now_gz)
  10.         ix2 = gz.index(year)
  11.         if ix1 == ix2:
  12.             print('今年%d正好是%s年!' % (now_y, year))
  13.             print('上一个%s年是%d年!' % (year, now_y - 60))
  14.             print('下一个%s年是%d年!' % (year, now_y + 60))
  15.         elif ix1 > ix2:
  16.             print('上一个%s年是%d年!' % (year, now_y - ix1 + ix2))
  17.             print('下一个%s年是%d年!' % (year, now_y - ix1 + ix2 + 60))
  18.         elif ix1 < ix2:
  19.             print('上一个%s年是%d年!' % (year, now_y - ix1 + ix2 - 60))
  20.             print('下一个%s年是%d年!' % (year, now_y - ix1 + ix2))
  21.     else:
  22.         year = int(year)
  23.         print(gz[(year - 1984) % 60])


  24. try:
  25.     while True:
  26.         year = input('输入年份,如2019,或干支,如己亥(输入q退出):')
  27.         if year == 'q':
  28.             break
  29.         else:
  30.             tianzhi(year)
  31. except ValueError:
  32.     print('输入错误!')
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-12-15 16:50:00 | 显示全部楼层
import datetime
tiangan = ['甲', '乙', '丙', '丁', '戊', '己', '庚', '辛', '壬', '癸']
dizhi = ['子', '丑', '寅', '卯', '辰', '巳', '午', '未', '申', '酉', '戌', '亥']
td=[]
s1= 0
s2= 0
while True:
    if s1>=len(tiangan):
        s1=0
    if s2>=len(dizhi):
        s2=0
    SS=tiangan[s1]+dizhi[s2]
    if SS not in td:
        td.append(SS)
    else:
        break
    s1+=1
    s2+=1
while True:
    data = input('输入年份,如2017,或干支,如丁酉:')
    t=data.isdigit()
    if data in td or (t and isinstance(int(data),int)):
        break
    else:
        print('输入错误')
def yearToganzhi(data):
    n = int(data)%10-3
    m = int(data)%12-3
    if n>0:
        gan = tiangan[n-1]
    else:
        gan=tiangan[n-1+10]
    if m>0:
        zhi = dizhi[m-1]
    else:
        zhi = dizhi[m-1+12]
    result = gan+zhi
    return result
def ganzhiToyear(data):
    datanow = datetime.datetime.now().year
    ganzhinow = yearToganzhi(datanow)
    index1 = td.index(ganzhinow)
    index2 = td.index(data)
    if ganzhinow==data:
        yearl= datanow - 60
        yearn= datanow + 60
    elif index1>index2:
        yearl = datanow -(index1-index2)
        yearn = datanow-(index1-index2)+60
    else:
        yearl=datanow+(index2-index1)-60
        yearn=datanow+(index2-index1)
    return (ganzhinow,yearl,yearn)
if t:
    print(yearToganzhi(data))
else:
    a,b,c=ganzhiToyear(data)
    if a == data:
        print('今年%d的正好是%s年'%(datetime.datetime.now().year,data))
        print('上一个%s年是%d'%(data,b))
        print('下一个%s年是%d'%(data,c))
    else:
        print('上一个%s年是%d'%(data,b))
        print('下一个%s年是%d'%(data,c))
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-12-10 13:15:26 | 显示全部楼层
  1. import time

  2. def year_ng(year):
  3.     global tg,dz
  4.     t = year % 10   
  5.     if t > 3:
  6.         ntg = t -3
  7.     else:
  8.         ntg = t-3+10
  9.     d = year % 12   
  10.     if d > 3:
  11.         ndz = d-3
  12.     else:
  13.         ndz = d-3+12   
  14.     return tg[ntg-1]+dz[ndz-1]

  15. def ng_year(td):
  16.     global tg,dz,list_ng
  17.     year = time.localtime()[0] #获取今年是哪一年
  18.     if td == year_ng(year):
  19.         return ("今年{0}正好是{1}年\n上一个{1}年是{2}\n下一个{1}年是{3}".format(year,td,year-60,year+60))
  20.     else:        
  21.         tyear = list_ng.index('戊戌')
  22.         nyear = list_ng.index(td)
  23.         if tyear > nyear:
  24.             x = tyear-nyear
  25.             return ("上一个%s年是%d\n下一个%s年是%d"%(td,(year-x),td,(year-x+60)))
  26.         if tyear < nyear:
  27.             x = nyear - tyear
  28.             return ("上一个%s年是%d\n下一个%s年是%d"%(td,(year+x-60),td,(year+x)))

  29. tg = ['甲', '乙', '丙', '丁', '戊', '己', '庚', '辛', '壬', '癸']
  30. dz = ['子', '丑', '寅', '卯', '辰', '巳', '午', '未', '申', '酉', '戌', '亥']
  31. i = 0
  32. list_ng= []
  33. while i < 60:
  34.     t = tg.pop(0)
  35.     tg.append(t)
  36.     d = dz.pop(0)
  37.     dz.append(d)
  38.     list_ng.append(t+d)
  39.     i += 1

  40. while 1:
  41.     n = input("输入年份(如2017), 或干支(如丁酉):")
  42.     if n.isdigit():
  43.         print(year_ng(int(n)),"\n")
  44.     elif n in list_ng:
  45.         print(ng_year(n),"\n")
  46.     else:
  47.         print("输入错误!!!\n")
复制代码


  1. 输入年份(如2017), 或干支(如丁酉):2018
  2. 戊戌

  3. 输入年份(如2017), 或干支(如丁酉):戊戌
  4. 今年2018正好是戊戌年
  5. 上一个戊戌年是1958
  6. 下一个戊戌年是2078

  7. 输入年份(如2017), 或干支(如丁酉):2019
  8. 己亥

  9. 输入年份(如2017), 或干支(如丁酉):己亥
  10. 上一个己亥年是1959
  11. 下一个己亥年是2019

  12. 输入年份(如2017), 或干支(如丁酉):we
  13. 输入错误!!!

  14. 输入年份(如2017), 或干支(如丁酉):
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-9-19 23:25:11 | 显示全部楼层
  1. import datetime
  2. year1=datetime.datetime.now().year
  3. tiangan = ['甲', '乙', '丙', '丁', '戊', '己', '庚', '辛', '壬', '癸']
  4. dizhi = ['子', '丑', '寅', '卯', '辰', '巳', '午', '未', '申', '酉', '戌', '亥']
  5. def getGanzhi(year):
  6.     if year==2022:
  7.         return '壬寅'
  8.     elif year>2022:
  9.         return tiangan[(year-2022+8)%10]+dizhi[(year-2022+2)%12]
  10.     else:
  11.         return tiangan[8-(2022-year)%10]+dizhi[2-(2022-year)%12]
  12. while True:
  13.     s=input('输入年份,如2017,或干支,如丁酉:')
  14.     if s.isdigit():
  15.         print(getGanzhi(int(s)))
  16.         break
  17.     else:
  18.         if s[0] in tiangan and s[1] in dizhi and len(s)==2:
  19.             if str(getGanzhi(year1))==s:
  20.                 print(year1-60,year1,year1+60)
  21.             else:
  22.                 for i in range(year1+1,year1+60):
  23.                     if str(getGanzhi(i))==s:
  24.                         print(i-60,i)
  25.                         break
  26.             break
  27.         else:
  28.             print('输入错误,请重新输入')
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-9-19 21:51:15 | 显示全部楼层
  1. import time

  2. tiangan = ['甲', '乙', '丙', '丁', '戊', '己', '庚', '辛', '壬', '癸']
  3. dizhi = ['子', '丑', '寅', '卯', '辰', '巳', '午', '未', '申', '酉', '戌', '亥']
  4. def digit(year):
  5.      year_gan=(int(year[-1])-3)%10
  6.      year_zhi=(int(year)+7)%12
  7.      # print(f'{tiangan[year_gan-1]}'f'{dizhi[year_zhi-1]}')#直接打印无法引用
  8.      return (f'{tiangan[year_gan-1]}'f'{dizhi[year_zhi-1]}')


  9. def alpha(tiangan):
  10.     year=time.asctime().split()[-1]
  11.     if digit(year)==tiangan:
  12.         print(f'本年为{tiangan}')
  13.     year=int(year)
  14.     # print(print(f'上一个{tiangan}年为{i}') for i in range(year-60,year)  if digit(str(i))==tiangan ) #先for再if
  15.     for i in range(year-60,year):
  16.         if digit(str(i))==tiangan:
  17.             print(f'上一个{tiangan}年为{i}')
  18.     for i in range(year+1,year+61):
  19.         if digit(str(i)) == tiangan:
  20.             print(f'下一个{tiangan}年为{i}')

  21. def result(alnum):
  22.     if alnum.isdigit(): #isdigit() 方法
  23.         print(digit(alnum))
  24.     elif len(alnum)==2 and alnum[0] in tiangan and alnum[1] in dizhi:
  25.         alpha(alnum)
  26.     else:
  27.         print('输入错误!')

  28. while True:

  29.     alnum=input('输入年份,如2017,或天干地支,如丁酉:')
  30.     if alnum=='':
  31.         break
  32.     result(alnum)



复制代码


每次循环鼠标默认在最前面,有什么好办法吗?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-8-17 22:01:10 | 显示全部楼层
  1. tiangan = {0: '甲', 1: '乙', 2: '丙', 3: '丁', 4: '戊', 5: '己', 6: '庚', 7: '辛', 8: '壬', 9: '癸'}
  2. dizhi = {0: '子', 1: '丑', 2: '寅', 3: '卯', 4: '辰', 5: '巳', 6: '午', 7: '未', 8: '申', 9: '酉', 10: '戌', 11: '亥'}

  3. def fun1(a):
  4.     a = a - 1984
  5.     t = tiangan[a % 10]
  6.     d = dizhi[a % 12]
  7.     print(t+d)

  8. def fun2(a):
  9.     t = target[:1]
  10.     d = target[1:]
  11.     tiangan_plus = 0
  12.     dizhi_plus = 0
  13.    
  14.     for i in tiangan:
  15.         if tiangan[i] == t:
  16.             tiangan_plus = i
  17.             break

  18.     for i in dizhi:
  19.         if dizhi[i] == d:
  20.             dizhi_plus = i
  21.             break

  22.     location = int( ((tiangan_plus+10-dizhi_plus) % 10)/2*12+dizhi_plus  + 1984)
  23.     if location < 2018 :
  24.         location += 60
  25.     if location != 2018 :
  26.         print('上一个%s年是%s年' %(target, location - 60))
  27.         print('下一个%s年是%s年' %(target, location ))
  28.     else:
  29.         print('今年%s年正好是%s年' %(location, target))
  30.         print('上一个%s年是%s年' %(target, location - 60))
  31.         print('下一个%s年是%s年' %(target, location + 60))
  32. '''------------------------------------------------------------------------------'''
  33. target = input('输入年份,如2018,或干支,如戊戌:')
  34. if target.isdigit() == True:
  35.     fun1(int(target))
  36. elif target[:1] not in tiangan.values() or target[1:] not in dizhi.values():
  37.     print('输入错误!')
  38. else:
  39.     fun2(target)
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-8-15 15:11:47 | 显示全部楼层
本帖最后由 DavidCowboy 于 2018-8-15 17:08 编辑

ist1 = ['甲','乙','丙','丁','戊','己','庚','辛','壬','癸']
list2 = ['子','丑','寅','卯','辰','巳','午','未','申','酉','戌','亥']
list5 = []

temp = input('請輸入西元年份或是天干地支:')

while temp.isdecimal():
    year = int(temp)
    print('西元 ', year , '年是' , list1[year%10-4] , list2[year%12-4] , '年')
    break

while temp.isalpha():

    list3 = list1 * 6
    list4 = list2 * 5
    for x in range(60):
        list5.extend([[list3[x] , list4[x]]])

    count = list5.index([temp[0] , temp[1]])
    answer = (2018 // 60) * 60 + 4 + count

    if answer < 2018:
        print('西元 ' , answer , '年是' , temp , ' 年')
        print('西元 ' , answer + 60 , '年是' , temp , ' 年')
    elif answer >2018:
        print('西元 ' , answer - 60 , '年是' , temp , ' 年')
        print('西元 ' , answer , '年是' , temp , ' 年')
    else:
        print('西元 2018 是' , temp , ' 年')
    break
小甲鱼最新课程 -> https://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))
复制代码
小甲鱼最新课程 -> https://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('请按套路出牌')
小甲鱼最新课程 -> https://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('请按套路出牌')
小甲鱼最新课程 -> https://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('请按套路出牌')
小甲鱼最新课程 -> https://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('请按套路出牌')
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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('输入错误!')
复制代码
小甲鱼最新课程 -> https://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
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 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('输入格式错误')
复制代码
小甲鱼最新课程 -> https://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)
小甲鱼最新课程 -> https://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)
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-9-24 03:26

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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