进阶级Python编程题(4)洛谷(月份天数)思维转换

题目描述

输入年份和月份,输出这一年的这一月有多少天。需要考虑闰年。

输入格式

输入两个正整数,分别表示年份 y 和月数 m,以空格隔开。

输出格式

输出一行一个正整数,表示这个月有多少天。

题目很简单,但是这里面有很多需要我们注意的地方所以,我在此要提高这道提的难度,话不多说,代码如下:

y,m=map(int,input().split())
if y%4==0:
    if y%100==0:
        if y%400==0:
            if m==2 :
                print(29)
            elif m==1 or m==3 or m==5 or m==7 or m==8 or m==10 or m==12:
                print(31)
            else:
                print(30)
        else:
            if m==2 :
                print(28)
            elif m==1 or m==3 or m==5or m==7 or m==8 or m==10 or m==12:
                print(31)
            else:
                print(30)
    else:
        if m==2 :
            print(29)
        elif m==1 or m==3 or m==5or m==7 or m==8 or m==10 or m==12:
            print(31)
        else:
            print(30)
else:
    if m==2:
        print(28)
    elif m ==1 or m ==3 or m ==5 or m ==7 or m ==8 or m ==10 or m ==12:
        print(31)
    else:
        print(30)

这是先判断年份再判断月份的代码,这里面还融入了闰年的判断,所以我们要多方位思考这个问题,还有一点要补充的:

            if m==2 :
                print(28)
            if  m==1 or m==3 or m==5or m==7 or m==8 or m==10 or m==12:
                print(31)
            else:
                print(30)

如果月份的判断我们这样写的话不论你输出的m的值等于几最终结果都会有30这个值,为什么呢?在使用分支语句的时候如果都用if语句那么每个if语句都会被判断是否符合条件,若符合条件每个if语句都会被使用,如果使用if和elif语句那么就会两者判断条件,只要符合条件那么另一个条件就必然不会输出结果,而else语句在都是if的语句里只要两个条件有一个不满足就会输出else的语句,而if elif语句必须都不满足才会执行else语句,不知道这样我又没有讲清楚这个需要注意的地方。

而另一种通过判断月份再判断年份的代码就比上述先判断年份再判断月份的要简单,因为这个只需要判断2月份的不同情况就行,而上述那个要先判断是否是闰年然后再判断是几月,话不啰嗦,代码如下:

y,m=map(int,input().split())
if m==2:
    if y%4==0:
        if y%100==0:
            if y%400==0:
                print(29)
            else:
                print(28)
        else:
            print(29)
elif m ==1 or m ==3 or m ==5 or m ==7 or m ==8 or m ==10 or m ==12:
    print(31)
else:
    print(30)

很明显下面这个比较简单些,谢谢您的观看希望对您能有帮助!

  • 14
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值