天天看点

python练习4:输入某年某月某日,判断这一天是这一年的第几天?

输入某年某月某日,判断这一天是这一年的第几天?

这个是第四个题。。。最复杂的点是对于二月输入是否合法的判断,

从代码中看出我对于月份的判断格式是这样的:

if false:

    print(‘错误’)

else:

    print(‘日期’)

导致我进入了误区,在求二月的时候也使用了这种判断语句,导致我花了一些时间但是之后发现:

if true:

    print(‘日期’)

else:

    print(‘错误’)

这种格式对于二月的判断而言更为简单和有效。(是闰年的判断条件比不是闰年的条件要简单多)

其他的就相对很简单了

还有一个注意点是input()函数得到的数据是字符型,需要转为整型才能当成数字在if中判断,或者将列表中的数据都改为字符型

day31 = [1, 3, 5, 7, 8, 10, 12]     #天数为31天的月份
day30 = [4, 6, 9, 11]               #天数为30天的月份
year365 = [0,31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365]     #平年每个月结束时的天数  365天
year366 = [0,31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335, 366]     #闰年每个月结束时的天数  366天(2月多一天)


def getNum():
    pass


def check():
    data = input('请输入年月日(格式为:xxxx-xx-xx):')  # 规定格式,将 '-' 作为分隔符使用split()函数
    if '-' not in data:
        print('请按照正确格式输入年月日')
        return check()
    else:
        str1 = data.split('-')
        print('data1:',str1)     #   打印获取到的输入值。
        year = int(str1[0])
        month = int(str1[1])
        day = int(str1[2])

        if (month > 13 or month == 0):
            print('月输入错误,请重新输入')
            return check()
        # elif (day > 31 or (month == 2 and day > 29) or (((year%4==0 and year %100==0) and month == 2) and day>28 )):
        #         #     print('日输入错误')
        #         #     return check()
        elif month in day31:  # 一、三、五、七、八、十、腊,31天永不差
            if day > 31 or day == 0:
                print('日输入错误,该月只有31天,请重新输入')
                return check()
            else:
                print('输入的日期为%d年%d月%d日' % (year, month, day))
                if year % year % 4 == 0 and year % 100 != 0 or year % 40 == 0:
                    print(year366[month - 1] + day)
                else:
                    print(year365[month - 1] + day)
        elif month in day30:  # 四、六、九、十一,三十天没问题
            if day > 30 or day == 0:
                print('日输入错误,该月只有30天,请重新输入')
                return check()
            else:
                print('输入的日期为%d年%d月%d日' % (year, month, day))
        elif month == 2:
            # if ((day > 29) or
            #         (year % 4 == 0 and year % 100 == 0 and day > 28) or
            #         ((year % 4 == 0 and year % 100 != 0 and year % 400 != 0) and day > 29)):  # 闰年二月不能大于29,闰年:能被四整出,不能被100整除;或者被400整除
            #     print('日输入错误,2月最多29天,或者该年不是闰年,请重新输入')
            #     return check()
            if ((day <= 28 or (year % 4 == 0 and year % 100 != 0 and day < 29) or (year % 400 == 0 and day <= 29))):
                 print('输入的日期为%d年%d月%d日' % (year, month, day))
                 if year % year % 4 == 0 and year % 100 != 0 or year % 40 == 0:
                     print(year366[month - 1]+day)
                 else:
                     print(year365[month - 1]+day)
            else:
                print('日输入错误,2月最多29天,或者该年不是闰年,请重新输入')
                return check()

check()  #调用方法,使方法执行
           

因为是才开始学python,在一开始做这个题的时候条件判断那里用range()函数,在range()函数的参数里添加了每个月,但是range()函数最后只能有三个参数,而且一般用于判断是否在区间之中,然后没头绪,百度了下,看到了有小可爱使用了列表。提供了思路,下面给出小可爱的文章地址:

https://blog.csdn.net/qq_34173491/article/details/78819018

只看到她使用列表就没再看文章了。。。如果有相似的地方那可能就是想法撞到一起了。

2019年7月31日 18:49:51

tips:!!!

我一开始把题理解错了,所以这段代码也可以返回时间,也可以返回是该年的第几天