输入某年某月某日,判断这一天是这一年的第几天?
这个是第四个题。。。最复杂的点是对于二月输入是否合法的判断,
从代码中看出我对于月份的判断格式是这样的:
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:!!!
我一开始把题理解错了,所以这段代码也可以返回时间,也可以返回是该年的第几天