给定一个周号,(1st,2nd,...),本月1号所在的日子(1代表周一,2代表周二,...),以及本月的天数:返回一个字符串,由该周中每一天的月日组成,从周一开始,到周日结束。周数代表月份中的周数。
我做了以下函数:我的这些函数的代码如下。
import datetime
from datetime import datetime
import calendar
from datetime import date
def week(week_num, start_day, days_in_month):
week_string = ""
if week_num == 1:
if start_day == 1:
week_string = "1 2 3 4 5 6 7"
elif start_day == 2:
week_string = " 1 2 3 4 5 6"
elif start_day == 3:
week_string = " 1 2 3 4 5"
elif start_day == 4:
week_string = " 1 2 3 4"
elif start_day == 5:
week_string = " 1 2 3"
elif start_day == 6:
week_string = " 1 2"
elif start_day == 7:
week_string = " 1"
elif week_num == 2:
if start_day == 1:
week_string = "8 9 10 11 12 13 14"
elif start_day == 2:
week_string = "7 8 9 10 11 12 13"
elif start_day == 3:
week_string = "6 7 8 9 10 11 12"
elif start_day == 4:
#carry on in the above way, but this doesn't seem efficient
return week_string
def main():
month_name = input("Enter month:\n")
year = eval(input("Enter year:\n"))
if __name__=='__main__':
main()
有没有人有什么想法,如何做这个函数?我需要返回一个字符串值
我有另一个想法。
def week(week_num, start_day, days_in_month):
week_string = ""
if week_num == 1:
week_string = ""
day = start_day
for i in range(1, 8 -start_day+1):
week_string = week_string + str(i) + " "
week_string = "{0:<20}".format(week_string)
return week_string
一个关于这个函数的输入和输出的例子:
week(1, 3, 30)
返回字符串
' 1 2 3 4 5'
week(2, 3, 30)
返回字符串
' 6 7 8 9 10 11 12’
整个日历应该是这样的。
Mo Tu We Th Fr Sa Su
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
这是2020年4月的日历
还规定了以下内容。
week(week_num, start_day, days_in_month)
给定一个星期号(1号,2号,......),每月1号所在的日子(1代表星期一,2代表星期二,......),以及该月的天数,返回一个由该星期每一天的月份日期组成的字符串,从星期一开始,到星期日结束。
main()
从用户那里获得一个月和一个年的名称,然后通过获得周数,再获得每个周的周数字符串来打印该月的日历。
你可以迭代月中的所有日子,并按周打印。
DAYS = ['Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa', 'Su']
def week(start_day, days_in_month):
print(' '.join(DAYS))
w = [' ' for i in range(start_day-1)]
for day in range(1, days_in_month+1):
w.append(f'{day}' if day > 9 else f'{day} ')
if len(w) == 7:
print(' '.join(w))
w = []
print(' '.join(w))
测试:
>>>week(1, 30)
Mo Tu We Th Fr Sa Su
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
>>>week(6, 31)
Mo Tu We Th Fr Sa Su
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31