| 
 | 
 
 本帖最后由 hveagle 于 2023-1-10 09:56 编辑  
 
 
 
前言 
船上人从大楼把不二解救了,回船上 
突然,船坏了! 
原来就是一个零件 
你想:就是个零件吗,有什么难的 
高山派了你去修零件 
没想到要改代码! 
要求 
下面代码是能画出一个月历的程序: 
- eachmonth = [0,31,28,31,30,31,30,31,31,30,31,30,31]
 
 - week = ['下标为0, 占个位', '星期日', '星期一', '星期二', '星期三', '星期四', '星期五', '星期六']
 
 - from tkinter import *
 
 - root = Tk()
 
 - def is366(n):
 
 -     if (n % 4 == 0 and n % 100) or  n % 400 == 0:
 
 -         return True
 
 -     else:
 
 -         return False
 
 - def whatday(year, month, day):
 
 -     num366 = 0
 
 -     if year >= 2023:
 
 -         if year >= 2024:
 
 -             for each in range(2024, year+1, 4):
 
 -                 if is366(each):
 
 -                     num366 += 1
 
 -             if is366(year) and month < 3:
 
 -                 num366 -= 1
 
 -         deltday = (year - 2023)*365 + sum(eachmonth[:month]) + (day -1) + num366
 
 -         return (deltday-1) % 7 
 
 -     else:
 
 -         if year <= 2020:
 
 -             for each in range(year, 2023, 4):
 
 -                 if is366(each):
 
 -                     num366 += 1
 
 -             if is366(year) and month >= 3:
 
 -                 num366 -= 1
 
 -         deltday = (year - 2023)*365 + sum(eachmonth[:month]) + (day -1) - num366
 
 -         return (deltday-1) % 7
 
 - class Date:
 
 -     def __init__(self, y, m, d):
 
 -         self.y = y
 
 -         self.m = m
 
 -         self.d = d
 
 -         self.w = whatday(self.y, self.m, self.d)
 
 -         self.row = (self.d + bnum)//7 +2 if (self.d + bnum)%7 else (self.d + bnum)//7 +1
 
 - data = []
 
 - y = int(input('请输入年:'))
 
 - m = int(input('请输入月:'))
 
 - em = eachmonth[m]
 
 - bnum = whatday(y, m, 1)
 
 - if m == 2:
 
 -     if is366(y):
 
 -         em = 29
 
 - for i in range(1, em+1):
 
 -     data.append(Date(y, m, i))
 
 - Label(root, text=f'{y}年', fg='blue').grid(row=0, column=2)
 
 - Label(root, text=f'{m}月', fg='blue').grid(row=0, column=4)
 
 - i = -1
 
 - j = 0
 
 - while i < 6:
 
 -     while j < 7:
 
 -         i += 1
 
 -         j += 1
 
 -         Label(root, text=week[j], fg='red').grid(row=1, column=i)
 
 - for each in data:
 
 -     if each.w == 6 or each.w == 0:
 
 -         Label(root, text=str(each.d), fg='red').grid(row=each.row, column=each.w)
 
 -     else:
 
 -         Label(root, text=str(each.d)).grid(row=each.row, column=each.w)
 
 - mainloop()
 
  复制代码 
要求改代码,代码,画出一个年历 
若简单改成: 
- eachmonth = [0,31,28,31,30,31,30,31,31,30,31,30,31]
 
 - week = ['下表为0, 占个位', '星期日', '星期一', '星期二', '星期三', '星期四', '星期五', '星期六']
 
 - month = ['下标为0, 占个位', '1月', '2月', '3月', '4月', '5月', '6月', '7月', '8月', '9月', '10月', '11月', '12月']
 
  
- from tkinter import *
 
 - root = Tk()
 
  
- def is366(n):
 
 -     if (n % 4 == 0 and n % 100) or  n % 400 == 0:
 
 -         return True
 
 -     else:
 
 -         return False
 
  
- def whatday(year, month, day):
 
 -     num366 = 0
 
 -     if year >= 2022:
 
 -         if year >= 2024:
 
 -             for each in range(2024, year+1, 4):
 
 -                 if is366(each):
 
 -                     num366 += 1
 
 -             if is366(year) and month < 3:
 
 -                 num366 -= 1
 
 -         deltday = (year - 2023)*365 + sum(eachmonth[:month]) + (day -1) + num366
 
 -         return (deltday-1) % 7 
 
 -     else:
 
 -         if year <= 2020:
 
 -             for each in range(year, 2023, 4):
 
 -                 if is366(each):
 
 -                     num366 += 1
 
 -             if is366(year) and month >= 3:
 
 -                 num366 -= 1
 
 -         deltday = (year - 2023)*365 + sum(eachmonth[:month]) + (day -1) - num366
 
 -         return (deltday-1) % 7
 
  
- class Month:
 
 -     def __init__(self, y, m, d):
 
 -         self.y = y
 
 -         self.m = m
 
 -         self.d = d
 
 -         self.w = whatday(self.y, self.m, self.d)
 
 -         self.row = (self.d + bnum) //7 +2 if (self.d + bnum)%7 else(self.d + bnum) // 7 +1
 
 -         
 
  
- #以下为主程序
 
 -         
 
 - data = []
 
 - y = int(input('请输入年:'))
 
 - for i in range(1, 13):
 
 -     bnum = whatday(y, i, 1)
 
 -     em = eachmonth[i]
 
 -     if i == 2:
 
 -         if is366(y):
 
 -             em = 29
 
 -     for j in range(1, em+1):
 
 -         data.append(Month(y, i, j))
 
  
- for each in data:
 
 -     if each.w == 6 or each.w == 0:
 
 -         Label(root, text=str(each.d), fg='red').grid(row=each.row, column=each.w)
 
 -     else:
 
 -         Label(root, text=str(each.d)).grid(row=each.row, column=each.w)
 
  
- mainloop()
 
  复制代码 
是不对的 
本期算法:就是要靠你的思维! 
只有60分以上才能修好零件 
答案 
[/hide] 
奖励区 
| 名次 | 第1名 | 第2名 | 第3名 | 第4名 | 第5名 |  | 谁 | 等待着变成王者登上宝座~ |   |   |   |   |  | 语言 |   |   |   |   |   |  | 几楼 |   |   |   |   |   |  | 奖励 | 展示+8荣誉7鱼币2贡献1技术值最佳答案 | 展示+4荣誉4鱼币 | 展示+3荣誉3鱼币 | 展示+2荣誉 | 展示 |  
  
评分 |   
 
评分
- 
|  参与人数 1 | 荣誉 +2 | 
鱼币 +3 | 
贡献 +3 | 
收起
理由
 | 
 
  高山
 |  + 2 | 
 + 3 | 
 + 3 | 
鱼C有你更精彩^_^ | 
 
 
查看全部评分
 
 
 
 
 
 |