鱼C论坛

 找回密码
 立即注册
12
返回列表 发新帖
楼主: 新手·ing

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

[复制链接]
发表于 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
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

def fun1(a):
    a = a - 1984
    t = tiangan[a % 10]
    d = dizhi[a % 12]
    print(t+d)

def fun2(a):
    t = target[:1]
    d = target[1:]
    tiangan_plus = 0
    dizhi_plus = 0
    
    for i in tiangan:
        if tiangan[i] == t:
            tiangan_plus = i
            break

    for i in dizhi:
        if dizhi[i] == d:
            dizhi_plus = i
            break

    location = int( ((tiangan_plus+10-dizhi_plus) % 10)/2*12+dizhi_plus  + 1984)
    if location < 2018 :
        location += 60
    if location != 2018 :
        print('上一个%s年是%s年' %(target, location - 60))
        print('下一个%s年是%s年' %(target, location ))
    else:
        print('今年%s年正好是%s年' %(location, target))
        print('上一个%s年是%s年' %(target, location - 60))
        print('下一个%s年是%s年' %(target, location + 60))
'''------------------------------------------------------------------------------'''
target = input('输入年份,如2018,或干支,如戊戌:')
if target.isdigit() == True:
    fun1(int(target))
elif target[:1] not in tiangan.values() or target[1:] not in dizhi.values():
    print('输入错误!')
else:
    fun2(target) 
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

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


def alpha(tiangan):
    year=time.asctime().split()[-1]
    if digit(year)==tiangan:
        print(f'本年为{tiangan}')
    year=int(year)
    # print(print(f'上一个{tiangan}年为{i}') for i in range(year-60,year)  if digit(str(i))==tiangan ) #先for再if
    for i in range(year-60,year):
        if digit(str(i))==tiangan:
            print(f'上一个{tiangan}年为{i}')
    for i in range(year+1,year+61):
        if digit(str(i)) == tiangan:
            print(f'下一个{tiangan}年为{i}')

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

while True:

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

每次循环鼠标默认在最前面,有什么好办法吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-9-19 23:25:11 | 显示全部楼层
import datetime
year1=datetime.datetime.now().year
tiangan = ['甲', '乙', '丙', '丁', '戊', '己', '庚', '辛', '壬', '癸']
dizhi = ['子', '丑', '寅', '卯', '辰', '巳', '午', '未', '申', '酉', '戌', '亥']
def getGanzhi(year):
    if year==2022:
        return '壬寅'
    elif year>2022:
        return tiangan[(year-2022+8)%10]+dizhi[(year-2022+2)%12]
    else:
        return tiangan[8-(2022-year)%10]+dizhi[2-(2022-year)%12]
while True:
    s=input('输入年份,如2017,或干支,如丁酉:')
    if s.isdigit():
        print(getGanzhi(int(s)))
        break
    else:
        if s[0] in tiangan and s[1] in dizhi and len(s)==2:
            if str(getGanzhi(year1))==s:
                print(year1-60,year1,year1+60)
            else:
                for i in range(year1+1,year1+60):
                    if str(getGanzhi(i))==s:
                        print(i-60,i)
                        break
            break
        else:
            print('输入错误,请重新输入')
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

def year_ng(year):
    global tg,dz
    t = year % 10    
    if t > 3:
        ntg = t -3
    else:
        ntg = t-3+10
    d = year % 12    
    if d > 3:
        ndz = d-3
    else:
        ndz = d-3+12    
    return tg[ntg-1]+dz[ndz-1]

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

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

while 1:
    n = input("输入年份(如2017), 或干支(如丁酉):")
    if n.isdigit():
        print(year_ng(int(n)),"\n")
    elif n in list_ng:
        print(ng_year(n),"\n")
    else:
        print("输入错误!!!\n")

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

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

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

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

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

输入年份(如2017), 或干支(如丁酉):
想知道小甲鱼最近在做啥?请访问 -> 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))
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

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


def tianzhi(year):
    if year in gz:
        now_y = datetime.datetime.now().year
        now_gz = gz[(now_y - 1984) % 60]
        ix1 = gz.index(now_gz)
        ix2 = gz.index(year)
        if ix1 == ix2:
            print('今年%d正好是%s年!' % (now_y, year))
            print('上一个%s年是%d年!' % (year, now_y - 60))
            print('下一个%s年是%d年!' % (year, now_y + 60))
        elif ix1 > ix2:
            print('上一个%s年是%d年!' % (year, now_y - ix1 + ix2))
            print('下一个%s年是%d年!' % (year, now_y - ix1 + ix2 + 60))
        elif ix1 < ix2:
            print('上一个%s年是%d年!' % (year, now_y - ix1 + ix2 - 60))
            print('下一个%s年是%d年!' % (year, now_y - ix1 + ix2))
    else:
        year = int(year)
        print(gz[(year - 1984) % 60])


try:
    while True:
        year = input('输入年份,如2019,或干支,如己亥(输入q退出):')
        if year == 'q':
            break
        else:
            tianzhi(year)
except ValueError:
    print('输入错误!')
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

str1 = input("请输入需要查询的年份或干支(例如:2019、戊戌):")
today = 2017                                      # 定义检索起点
while True:
    if re.match(r'^\d+,str1):                   # 正则表达式检索如果输入的为年份
        key = (int(str1) - 4) % 60                # 2019年为己亥  对应 35  将输入年份余60后,反差得出检索值为(年份-4)
        print(dict1[key])
        break
    if str1 in list1:                             # 列表检索如果输入的为干支
        this_year = (dict1[(today-4) % 60])
        if str1 == this_year:                     # 如果正好为本年干支
            print("今年%s正好是 %s 年" % (today, this_year))
            print('上一个 %s 年是 %s 年' % (this_year, today - 60))
            print('下一个 %s 年是 %s 年' % (this_year, today + 60))
        else:                                     # while 循环查找符合年份
            n = today
            while str1 != dict1[(n - 4) % 60]:
                n += 1
            print("上一个 %s 年是 %s 年" % (str1, n-60))
            print("下一个 %s 年是 %s 年" % (str1, n))
        break
    else:
        str1 = input("输入错误!请输入年份或干支(例如:2019、戊戌):")
想知道小甲鱼最近在做啥?请访问 -> 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))
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-12-16 09:06:47 | 显示全部楼层
学习
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-17 00:45

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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