《python语言程序设计》第5章 第31题 2022年1月,和2022年8月 两种解题办法,也许坚持胜过结果 21297

2022年1月的设计很成功。但是我要超越,所以在这里我将重新开始新的设定和循环
主要要有新的循环条件,同时尝试换其他方式来确定一个月天数的排列。另外也是
一种复习。
我感觉1月份的设计很不错,但从6月份开始重新来学。感觉又变了。最好不要放弃,还是继续坚持。很重要
在这里插入图片描述

2022-08-10 用了4天时间想出来的

# first set up year number 首先设定年份的参数
year_num = 2022

# setting week day enter  设定一周7天为换行条件
count_num = 7
m = 0
month_text = 0
# according to month for loop condition 根据12个月为总循环
for i in range(1, 13):

    k = year_num % 100
    j = year_num // 100
    if i == 1:
        month_text = "January"
        m = 31
    elif i == 2:
        month_text = "February"
        m = 29
    elif i == 3:
        month_text = "March"
        m = 31
    elif i == 4:
        month_text = "April"
        m = 30
    elif i == 5:
        month_text = "May"
        m = 31

    elif i == 6:
        month_text = "June"
        m = 30
    elif i == 7:
        month_text = "July"
        m = 31
    elif i == 8:
        month_text = "August"
        m = 31
    elif i == 9:
        month_text = "September"
        m = 30
    elif i == 10:
        month_text = "October"
        m = 31
    elif i == 11:
        month_text = "November"
        m = 30
    elif i == 12:
        month_text = "December"
        m = 31

    print("  %10s %6s" % (month_text, year_num))
    print("Sum Mon Tue Wed Thu Fri Sat")

    if i == 1 or i == 2:
        a = i + 12
        b = year_num - 1
        k = b % 100
        j = b // 100
        for m in range(1, m + 1):
            h = (m + ((26 * (a + 1)) // 10) + k + (k // 4) + (j // 4) + 5 * j) % 7
            # 通过确定的星期数赋值相应的空格摆放每月的第一天
            if m == 1 and h == 0:
                print("\t\t\t\t\t\t", end="")
            elif m == 1 and h == 2:
                print("\t", end="")
            elif m == 1 and h == 3:
                print("\t\t", end="")
            elif m == 1 and h == 4:
                print("\t\t\t", end="")
            elif m == 1 and h == 5:
                print("\t\t\t\t", end="")
            elif m == 1 and h == 6:
                print("\t\t\t\t\t", end="")
            print(format(m, "3d"), end=" ")
            if h % 7 == 0:
                print()
        print("\n")

    else:
        for m in range(1, m + 1):
            h = (m + ((26 * (i + 1)) // 10) + k + (k // 4) + (j // 4) + 5 * j) % 7
            if m == 1 and h == 0:
                print("\t\t\t\t\t\t", end="")
            elif m == 1 and h == 2:
                print("\t", end="")
            elif m == 1 and h == 3:
                print("\t\t", end="")
            elif m == 1 and h == 4:
                print("\t\t\t", end="")
            elif m == 1 and h == 5:
                print("\t\t\t\t", end="")
            elif m == 1 and h == 6:
                print("\t\t\t\t\t", end="")
            print(format(m, "3d"), end=" ")
            if h % 7 == 0:
                print()
        print("\n")

2022年1月27日第一次做出来

# 程序的基本数据输入区域
year_num, mon_num, total_day = 2021, 1, 1
end_day = 0  # 建立这个变量 这样解决了该变量在程序里一直处于报错的状态

for j in range(mon_num, 13):
    count_mon_num = mon_num
    count_year_num = year_num
    if mon_num == 1 or mon_num == 2:
        count_mon_num += 12
        count_year_num -= 1
    j = count_year_num // 100
    k = count_year_num % 100
    b = 26 * (count_mon_num + 1)
    # 从字面上却别月份
    if mon_num == 1:
        month_text = "January"
    elif mon_num == 2:
        month_text = "February"
    elif mon_num == 3:
        month_text = "March"
    elif mon_num == 4:
        month_text = "April"
    elif mon_num == 5:
        month_text = "May"
    elif mon_num == 6:
        month_text = "June"
    elif mon_num == 7:
        month_text = "July"
    elif mon_num == 8:
        month_text = "August"
    elif mon_num == 9:
        month_text = "September"
    elif mon_num == 10:
        month_text = "October"
    elif mon_num == 11:
        month_text = "November"
    elif mon_num == 12:
        month_text = "December"
    # 针对单一某月日期生成设计 去掉了每个elif里的h赋值,直接由elif自己决定
    print(f"      {month_text} {year_num}     ")
    print('sun  Mon Tue Wed Thu Fri Sat')

    # 判定多少天是哪个月
    if mon_num == 1 or mon_num == 3 or mon_num == 5 or mon_num == 7 or mon_num == 8 or mon_num == 10 or mon_num == 12:
        end_day = 31
    elif mon_num == 2:
        end_day = 28
    elif mon_num == 4 or mon_num == 6 or mon_num == 9 or mon_num == 11:
        end_day = 30

    h = (total_day + (b // 10) + k + (k // 4) + (j // 4) + (5 * j)) % 7
    if h == 0:
        t = "周六"
        print('\t\t\t\t\t\t', format(total_day, '2d'))
        for i in range(2, end_day + 1):
            h += 1
            print(format(i, '3d'), end=' ')
            if h % 7 == 0:
                print()
    elif h == 1:
        t = "周日"
        for i in range(1, end_day + 1):
            h += 1
            print(format(i, '3d'), end=' ')
            if h % 7 == 0:
                print()
    elif h == 2:
        t = "周一"
        print('\t', format(total_day, '2d'), end=' ')
        for i in range(2, end_day + 1):
            h += 1
            print(format(i, '3d'), end=' ')
            if h % 7 == 0:
                print()

    elif h == 3:
        t = "周二"
        print('\t\t', format(total_day, '2d'), end=' ')
        for i in range(2, end_day + 1):
            h += 1
            print(format(i, '3d'), end=' ')
            if h % 7 == 0:
                print()
    elif h == 4:
        t = "周三"
        print('\t\t\t', format(total_day, '2d'), end=' ')
        for i in range(2, end_day + 1):
            h += 1
            print(format(i, '3d'), end=' ')
            if h % 7 == 0:
                print()

    elif h == 5:
        t = "周四"
        print('\t\t\t\t', format(total_day, '2d'), end=' ')
        for i in range(2, end_day + 1):
            h += 1
            print(format(i, '3d'), end=' ')
            if h % 7 == 0:
                print()

    elif h == 6:
        t = "周五"
        print('\t\t\t\t\t', format(total_day, '2d'), end=' ')
        for i in range(2, end_day + 1):
            h += 1
            print(format(i, '3d'), end=' ')
            if h % 7 == 0:
                print()
    mon_num += 1  # 经过2022-1-27又一次验证发现出错。进行调整。将该项放到此
    print()

结果

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

电饭叔

谢谢各位兄弟们的关注,谢谢破费

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值