我需要编写一个类语法,以便能够将日期,月份...添加到日期中。 目前我只有这个:
class Date:
def __init__(self, day=1, month=1, year=2015):
self.day = day
self.mon = month
self.year = year
def printUS(self):
print self.mon , "/" , self.day , "/" , self.year
def printUK(self):
print self.day , "." , self.mon , "." , str(self.year)[2:]
def AddDay(self,n=1):
我很困惑如何编写最后一个函数,以正确的方式为每个月添加天数,以免超过月份或年份的日期。 我宁愿不使用任何其他模块,因为我根本没有学过它们。 我没有超过一个月的基本编程经验,而且从未有过以前的经验。
答案 0 :(得分:1)
你有一个良好的开端。我建议调查模运算符。在阅读this question后计算给定月份的天数后,您可以使用它来增加月数。如果您有任何问题,请随时评论。
答案 1 :(得分:0)
为此,您可以创建一个确定给定月份天数的函数;即num_days(月,年) - > int numOfDays
然后你可以简单地将方法更改为Date类,add_days(self,n = 1),以检查num_days(self.mon,self.year)的值,然后如果self.day + n大于该值,增加self.mon并从n中减去该值,使用差值作为self.day的新值。
真正的诀窍是创建num_days函数,因为在闰年2月将有不同的天数。我建议查看闰年的完整技术定义,因为它比检查它是否可以被4整除更复杂。
答案 2 :(得分:0)
为了保持简单,您可以创建一个每月长度的数组。
monthlength = [31, 28, 31, 30, 31, ...]
然后检查添加日功能中的月份。所以最终看起来像这样:
monthlength = [31, 28, 31, 30, 31, ...]
def AddDay(self, n=1):
if self.day + n > self.monthlength[self.month]:
self.day = self.day + n - self.monthlength[self.month]
self.month = self.month + 1
if self.month == 13:
self.month = 1
self.year = self.year + 1
if self.year%4 == 0:
self.monthlength[1] = 29
else:
self.monthlength[1] = 28
else:
self.day = self.day + n
答案 3 :(得分:0)
试试这个。
class Date(object):
def __init__(self, day=1, month=1, year=2015):
self.day = day
self.mon = month
self.year = year
def __str__(self):
return "Date is: %s %s %s"%(self.day,self.mon,self.year)
def IsLeapYear(self):
"""
function returns 1 if self.year is leap,0 if it's not
"""
if(not (self.year%400) or (not(self.year%4) and self.year%100)):
return 1
else:
return 0
#values by each month whether it's leap year or not
monthlength = (
[31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31],
[31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
)
#the function you probably were looking for
def AddDay(self, n):
days=n
leap_year=self.IsLeapYear()
while(self.day+days>=Date.monthlength[leap_year][self.mon-1]):
days=days-(Date.monthlength[leap_year][self.mon-1]-self.day)
self.day=0
self.mon+=1
if (self.mon>12):
self.mon=1
self.year+=1
leap_year=self.IsLeapYear()
else:
self.day+=days
答案 4 :(得分:0)
class Date:
def __init__(self, day, month, year=2015):
self.day = day
self.month = month
self.year = year
self.monthlength = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
def printUS(self):
print self.month , "/" , self.day , "/" , self.year
def printUK(self):
print self.day , "." , self.month , "." , str(self.year)[2:]
def AddDay(self,n=1):
if (self.day) + n > (self.monthlength[self.month]):
self.day = self.day + n - self.monthlength[self.month]
else:
self.day = self.day + n
import sys
mydate=Date(1,11,2015)
mydate.AddDay(31)
mydate.printUS()