m0_64872078 2022-12-20 03:50 采纳率: 100%
浏览 11
已结题

对下面万年历代码用面向对象编程设计进行改写(不使用calendar库)

对下面万年历代码用面向对象编程设计进行改写(不使用calendar库)

MonthDays_year = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
MonthDays_leapy = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
twelfthMonth = [1, 3, 5, 7, 8, 10, 12]
weeklist = {0: 'Monday', 1: 'Tuesday', 2: 'Wednesday', 3: 'Thursday', 4: 'Frindy', 5: 'Saturday', 6: 'Sunday'}
def leapyear(year):
    if year % 4 == 0 and year % 100 != 0 or year % 400 == 0:
        l = 1
    else:
        l = 0
    return l
def yeardays(year):
    day1 = 0
    if year >= 1900:
        for i in range(1900, year):
            if leapyear(i) == 1:
                day1 += 366
            else:
                day1 += 365
    else:
        for i in range(year, 1900):
            if leapyear(i) == 1:
                day1 += 366
            else:
                day1 += 365
    return day1
def monthdays(year, month):
    day2 = 0
    if leapyear(year) == 1:
        for i in range(0, month):
            day2 = day2 + MonthDays_leapy[i]
    else:
        for i in range(0, month):
            day2 = day2 + MonthDays_year[i]
    return day2
def monthdays1(year, month):
    day2 = 0
    if leapyear(year) == 1:
        for i in range(0, month - 1):
            day2 = day2 + MonthDays_leapy[i]
    else:
        for i in range(0, month - 1):
            day2 = day2 + MonthDays_year[i]
    return day2
def thisMonthDays(year, month):
    if month in twelfthMonth:
        return 31
    elif leapyear(year) == 1 and month == 2:
        return 29
    elif leapyear(year) == 0 and month == 2:
        return 28
    else:
        return 30
def CaculateWeekDay(year, month, days):
    m = 0
    yeardays(year)
    monthdays(year, month)
    m = yeardays(year) + monthdays1(year, month) + days - 1
    print('输入日期为:', weeklist[m % 7])
def printTitle(year, month):
    print("-" * 36, "%s年%d月" % (year, month), "-" * 36)
    s = ("星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六")
    for i in s:
        print("%-10s" % i, end="")
    print()
def week(year, month):
    thisDay = 0
    yDays = yeardays(year)
    mDays = monthdays1(year, month)
    if year >= 1900:
        sumDays = yDays + mDays
        thisDay = (sumDays % 7) + 1
    else:
        sumDays = yDays - mDays
        thisDay = 7 - (sumDays % 7)
    return thisDay
def Calendarmonth(year, month):
    printTitle(year, month)
    day1 = week(year, month)
    day2 = thisMonthDays(year, month)
    if day1 != 7:
        for i in range(1, day1 + 1):
            s = " "
            print("%-13s" % s, end="")
    for j in range(day1 + 1, day1 + day2 + 1):

        if j % 7 == 0:
            print("%-13d" % (j - day1))
        else:
            print("%-13d" % (j - day1), end="")
def Calendaryear(year):
    for i in range(1, 13):
        Calendarmonth(year, i)
        print()
def Calendar():
    year = int(input('请输入要查询的年份:'))
    month = int(input('请输入要查询的月份,若仅查年请输入0:'))
    days = int(input('请输入要查询的日期,若仅查月历或年历输入0:'))
    if year != 0 and month != 0 and days != 0:
        CaculateWeekDay(year, month, days)
    elif year != 0 and month != 0 and days == 0:
        Calendarmonth(year, month)
    else:
        Calendaryear(year)
Calendar()
  • 写回答

1条回答 默认 最新

  • 奔波儿灞8708 2022-12-20 10:27
    关注
    
    MonthDays_year = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
    MonthDays_leapy = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
    twelfthMonth = [1, 3, 5, 7, 8, 10, 12]
    weeklist = {0: 'Monday', 1: 'Tuesday', 2: 'Wednesday', 3: 'Thursday', 4: 'Frindy', 5: 'Saturday', 6: 'Sunday'}
    
    class Caculate():
        def __init__(self,year,month,days):
            self.year = year
            self.month = month
            self.days = days
    
        def leapyear(self,year):
            if year % 4 == 0 and year % 100 != 0 or year % 400 == 0:
                l = 1
            else:
                l = 0
            return l
    
        def yeardays(self):
            day1 = 0
            if self.year >= 1900:
                for i in range(1900, self.year):
                    if self.leapyear(i) == 1:
                        day1 += 366
                    else:
                        day1 += 365
            else:
                for i in range(self.year, 1900):
                    if self.leapyear(i) == 1:
                        day1 += 366
                    else:
                        day1 += 365
            return day1
    
        def monthdays(self):
            day2 = 0
            if self.leapyear(self.year) == 1:
                for i in range(0, self.month):
                    day2 = day2 + MonthDays_leapy[i]
            else:
                for i in range(0, self.month):
                    day2 = day2 + MonthDays_year[i]
            return day2
        def monthdays1(self):
            day2 = 0
            if self.leapyear(self.year) == 1:
                for i in range(0,self.month - 1):
                    day2 = day2 + MonthDays_leapy[i]
            else:
                for i in range(0, self.month - 1):
                    day2 = day2 + MonthDays_year[i]
            return day2
        def thisMonthDays(self):
            if self.month in twelfthMonth:
                return 31
            elif self.leapyear(self.year) == 1 and self.month == 2:
                return 29
            elif self.leapyear(self.year) == 0 and self.month == 2:
                return 28
            else:
                return 30
        def CaculateWeekDay(self):
            m = 0
            self.monthdays()
            m = self.yeardays() + self.monthdays1() + self.days - 1
            print('输入日期为:', weeklist[m % 7])
        def printTitle(self):
            print("-" * 36, "%s年%d月" % (self.year, self.month), "-" * 36)
            s = ("星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六")
            for i in s:
                print("%-10s" % i, end="")
            print()
        def week(self):
            thisDay = 0
            yDays = self.yeardays()
            mDays = self.monthdays1()
            if self.year >= 1900:
                sumDays = yDays + mDays
                thisDay = (sumDays % 7) + 1
            else:
                sumDays = yDays - mDays
                thisDay = 7 - (sumDays % 7)
            return thisDay
    
        def Calendarmonth(self):
            day1 = self.week()
            day2 = self.thisMonthDays()
            if day1 != 7:
                for i in range(1, day1 + 1):
                    s = " "
                    print("%-13s" % s, end="")
            for j in range(day1 + 1, day1 + day2 + 1):
                if j % 7 == 0:
                    print("%-13d" % (j - day1))
                else:
                    print("%-13d" % (j - day1), end="")
    
        def Calendaryear(self):
            for i in range(1, 13):
                self.Calendarmonth()
                print()
    
    
    if __name__ == "__main__":
        year = int(input('请输入要查询的年份:'))
        month = int(input('请输入要查询的月份,若仅查年请输入0:'))
        days = int(input('请输入要查询的日期,若仅查月历或年历输入0:'))
    
        if year != 0 and month != 0 and days != 0:
            Caculate(year,month,days).CaculateWeekDay()
        elif year != 0 and month != 0 and days == 0:
            Caculate(year, month, days).Calendarmonth()
        else:
            Caculate(year, month, days).Calendaryear()
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 12月29日
  • 已采纳回答 12月21日
  • 创建了问题 12月20日

悬赏问题

  • ¥15 远程桌面文档内容复制粘贴,格式会变化
  • ¥15 关于#java#的问题:找一份能快速看完mooc视频的代码
  • ¥15 这种微信登录授权 谁可以做啊
  • ¥15 请问我该如何添加自己的数据去运行蚁群算法代码
  • ¥20 用HslCommunication 连接欧姆龙 plc有时会连接失败。报异常为“未知错误”
  • ¥15 网络设备配置与管理这个该怎么弄
  • ¥20 机器学习能否像多层线性模型一样处理嵌套数据
  • ¥20 西门子S7-Graph,S7-300,梯形图
  • ¥50 用易语言http 访问不了网页
  • ¥50 safari浏览器fetch提交数据后数据丢失问题