python练习题2

#给出一个日子,和一个数字(可以是正数或负数)

#算出这个日子加上这个天数后是哪个日子

def day():
    date=raw_input("(MM/DD/YY)>>")
    date=date.split("/")
    year1=int(date[-1])
    month1=int(date[0])
    day1=int(date[1])
    num=raw_input("enter a number:")
    num=int(num)
    month_days=[31,28,31,30,31,30,31,31,30,31,30,31]
    days1=sum(month_days[:(month1-1)])+day1

    if int(date[2])%4==0:
        month_days[3]=29
        years1=366
    else:
        years1=365

    sumdays=days1+num
    if num>0:
        lis=[]
        if sumdays<years1:
            year2=year1
            print year2
            lis.append(year2)
            sumday=0
            for i,j in enumerate(month_days):
                if sumday<sumdays:
                    sumday=sumday+int(j)
                else:
                    month2=i
                    print month2
                    lis.append(month2)
                    marginday=sum(month_days[:i])-sumdays
                    day2=month_days[i-1]-marginday
                    print day2
                    lis.append(day2)
                    break
            print "%d天后的日期为:%d年%d月%d号"%(num,lis[0],lis[1],lis[2])
        elif sumdays>years1:
            lis=[]
            years2=years1
            year2=year1
            remindays=sumdays-years2
            while remindays>years2:
                year2=year2+1
                lis.append(year2)
                if year2%4==0:
                    remindays=remindays-366
                else:
                    remindays=remindays-365
            print remindays  

            for i,j in enumerate(month_days):
                if remindays<sum(month_days[:i+1]):
                    month2=i
                    lis.append(month2)
                    day2=remindays-sum(month_days[:i])
                    lis.append(day2)
                    break

            print "%d天后的日期为:%d年%d月%d号"%(num,lis[0],lis[1],lis[2])
        else:
            print "%d天后的日期为:%d年%d月%d号"%(num,year1,12,31)
    #elif sumdays==0:

        #print "%d天后的日期为:%d年%d月%d号"%(num,year1,1,1)
    else:
        lis=[]
        remindays=0
        years2=years1
        year2=year1
        if sumdays<0:

            #if year2%4==0:
                #years2=366
            #else:
                #years2=365
            #remindays=abs(sumdays)-years2
            remindays=abs(sumdays)
            while remindays>0:
                year2=year2-1

                if year2%4==0:
                    remindays=remindays-366
                else:
                    remindays=remindays-365
            lis.append(year2)
            print remindays
            remindays=abs(remindays)
        elif sumdays==0:
            print "%d天后的日期为:%d年%d月%d号"%(num,year1,1,1)
        else:
            remindays=sumdays
            lis.append(year1)
        print remindays
        for i,j in enumerate(month_days):
            if remindays<sum(month_days[:i+1]):
                month2=i+1
                lis.append(month2)
                day2=remindays-sum(month_days[:i])
                lis.append(day2)
                break

        print "%d天后的日期为:%d年%d月%d号"%(num,lis[0],lis[1],lis[2])        

    #lis=[]
    #for i,j in enumerate(month_days):
        #if i+1==int(date[0]):
            #day=month_days[i]-int(date[1])
            #if num+int(date[1])<month_days[i]:
                #lis.append(int(date[0]))
                #lis.append(num+int(date[1]))
                #lis.append(int(date[-1]))
    #print lis
day()
时间: 2024-12-09 11:27:25

python练习题2的相关文章

Python练习题 024:求位数及逆序打印

[Python练习题 024] 给一个不多于5位的正整数,要求:一.求它是几位数,二.逆序打印出各位数字. ---------------------------------------------- 这题如果不用递归,实在太简单了!!!代码上: str = input('请输入一个不多于5位的正整数:') print('这个数字是%s位数,逆序为%s.' % (len(str), str[::-1])) 输出结果如下: 请输入一个不多于5位的正整数:45931这个数字是5位数,逆序为13954

python练习题:循环打印嵌套列表

好久没写博文了,添加一个练习题,选自<head_first_python>~~ python列表:以中括号开始和结束"[]":列表项以逗号","分隔开,使用赋值操作符"="赋予一个标识符.如: movies=["the holy",1975,"terry jones",91,["graham",["michael","john",&qu

Python练习题 028:求3*3矩阵对角线数字之和

[Python练习题 028] 求一个3*3矩阵对角线元素之和 ----------------------------------------------------- 这题解倒是解出来了,但总觉得代码太啰嗦.矩阵这东西,应该有个很现成的方法可以直接计算才对-- 啰嗦代码如下: str = input('请输入9个数字,用空格隔开,以形成3*3矩阵:') n = [int(i) for i in str.split(' ')] #获取9个数字 mx = [] #存储矩阵 for i in ra

Python练习题 027:对10个数字进行排序

[Python练习题 027] 对10个数字进行排序 --------------------------------------------- 这题没什么好说的,用 str.split(' ') 获取输入的10个数字,然后用 lst.sort() 就完成排序了.代码如下: s = input('请输入10个数字,以空格隔开:') n = [int(x) for x in s.split(' ')] n.sort() print(n) 输出结果如下: 请输入10个数字,以空格隔开:3 23 4

Python练习题 023:比后面的人大2岁

[Python练习题 023] 有5个人坐在一起,问第五个人多少岁?他说比第4个人大2岁.问第4个人岁数,他说比第3个人大2岁.问第三个人,又说比第2人大两岁.问第2个人,说比第一个人大两岁.最后 问第一个人,他说是10岁.请问第五个人多大? ----------------------------------------------------- 这题真是--用心算就能算出来好吗?好吧,应该又是要训练递归函数,最近这几题总是跟递归纠缠不清.不过,似乎慢慢理解了递归函数的写法了.本题代码如下:

Python练习题 003:完全平方数

[Python练习题 003]一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少? ------------------------------------------------- 所谓的“完全平方数”,就是开完根号仍然是整数. 数学渣是这么思考的:假设这个数 i 在10000以内.第一步:x = sqrt(i+100).如果 x == floor(x),则证明 x 是个整数.第二步道理也相同,但要记得把 x**2 把根号还原回来,再加上 168,然后再来

Python练习题 016:猴子吃桃

[Python练习题 016] 猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个.第二天早上又将剩下的桃子吃掉一半,又多吃了一个.以后每天早上都吃了前一天剩下的一半零一个.到第10天早上想再吃时,见只剩下一个桃子了.求第一天共摘了多少. -------------------------------------------------- 这题得倒着推.第10天还没吃,就剩1个,说明第9天吃完一半再吃1个还剩1个,假设第9天还没吃之前有桃子p个,可得:p * 1/2 -

Python练习题 009:水仙花数

[Python练习题 009] 打印出所有的“水仙花数”,所谓“水仙花数”是指一个三位数,其各位数字立方和等于该数本身.例如:153是一个“水仙花数”,因为153=1的三次方+5的三次方+3的三次方. ---------------------------------------------------------------------- 这题也是送分题,只要能把任意三位数的百位.十位.个位拆解出来就好办了.思路:将任意3位数除以100再向下取整,即可得到百位数.将这个3位数减去(百位数*10

Python练习题 025:判断回文数

[Python练习题 025] 一个5位数,判断它是不是回文数.即12321是回文数,个位与万位相同,十位与千位相同. ----------------------------------------------- 做题做到现在,这种题目已经很轻车熟路了.希望下一题能增加点难度啊~~~ x = input('请输入一个5位数:') if x[0] == x[4] and x[1] == x[3]: print('%s是个回文数' % x) else: print('%s不是回文数' % x) 输

Python练习题 015:一颗自由落地的球

[Python练习题 015] 一球从100米高度自由落下,每次落地后反跳回原高度的一半,再落下.求它在第10次落地时,共经过多少米?第10次反弹多高? ---------------------------------------------------------- 这题其实都可以笔算出来,因为也就是落地10次.看网上给出的结果也是五花八门,也不知道自己算的对不对,请大神们赐教. 我的思路是:除了第1次从100米高度落下,其余的9次都经历了"反弹-落地"的过程,每个过程来回走过的长