<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
A:先輸出提示語句,並接受使用者輸入的年、月。
B:根據使用者輸入的年,先判斷是否是閏年。
C:根據使用者輸入的月來判斷月的天數。
D:用迴圈計算使用者輸入的年份距1900年1月1日的總天數。
E:用迴圈計算使用者輸入的月份距輸入的年份的1月1日共有多少天。
F:相加D與E的天數,得到總天數。
G:用總天數來計算輸入月的第一天的星期數。
H:根據G的值,格式化輸出這個月的日曆!
根據題目的八個要求,可以看出有些功能是重複或者說需要相互呼叫的,所以可以用模組的思想將每個要求封裝成函數;
①判斷是否是閏年函數
根據閏年的判斷規則,如果年是4的倍數,但不是100的倍數則是閏年或者是400的整數倍也是閏年,所以函數需要傳入一個引數(年份)
#判斷閏年 def B(year): if year % 4 == 0 and year % 100 != 0 or year % 400 == 0: return True return False
②判斷輸入月的天數的函數
除了2月份會根據平年和閏年發生變化以外, 每月的天數是已經確定好的;所以此時需要呼叫已經定義好的判斷閏年的函數才能確定二月的天數;所以函數需要傳入兩個引數(月份和年份)
此時有兩個小技巧,一個是判斷月份是那月,最開始用的是用相等加上or去判斷是否滿足條件,其實可以將大月或者小月的月份寫到一個列表中,然後再通過in去判斷;第二個是在確定天數時,可以先定義好一個常用值,然後根據月份去修改其值,最後返回常用值即可,這樣就少了幾行的賦值以及返回的程式碼
def C(year,month): days = 31 #31天居多,設定為預設值 if month == 2 : #2月份要判斷是否是閏年 if B(year): days=29 else: days=28; elif month in [4,6,9,11]: #判斷小月,只有30天 days=30 return days
③計算年份距離1900的總天數的函數
因為平年跟閏年的天數不一樣,所以要呼叫判斷閏年的函數,確定其一年的總天數;
總天數也就是相當於求每年的天數之和即可;所以需要去遍歷每年的天數求其總和即為結果;所以函數需要傳入一個引數(年份)
#某年到1900年的天數 def D(year:int): day = 0 for i in range(1900,year): if B(i): day +=366 else: day +=365 return day
④ 月份距離1月1日的天數的函數
距離1月1日的天數也就是每月天數的總和,此時就先需要確定其每月的天數,也就是需要呼叫之前定義的函數,還需要知道的是其年份判斷是否閏年,所以函數需要傳入兩個引數(年份和月份)
遍歷每月的天數(通過呼叫函數而來),然後將其求和,得到的就是需要的結果
#某月到1月1號的天數 def E(year:int,month:int): days = 0 for i in range(1,month): days += C(year,i) return days
⑤確定星期幾的函數
首先通過呼叫求年份距離的天數和月份的天數得到其天數總和,所以函數需要傳入兩個引數(月份和年份)
然後將總和加一(因為得到的是月份,而算天數時要獎當日計算再內),然後對7求餘即為星期幾
#確定星期幾 def G(year:int,month:int): total_day = D(year) + E(year,month) + 1 week = total_day % 7 return week
⑥格式化輸出日曆函數
輸出有兩種格式,一種是星期日在第一天,一種是星期日在最後一天;
第一種方式:星期日在第一天,根據得到的星期幾函數(也就是當月1號的星期幾函數),可以確定第一天的位置(也就是1的位置);
日曆也就是輸出1到總天數(根據月份確定)在對應的位置(星期幾),由於1號的位置已經確定,而一號前面的則為空,所以單獨遍歷輸出空格,然後再輸出日曆;
一週對應的是七天,也就是每七天進行一次換行,所以還需要定義一個計數器
第二種方式:也就是星期日在最後一天,其他邏輯都是一樣的,只是在確定1號的位置不一樣;
本來週日的位置為第一個,但是現在變成了最後一個,也就是位置向後移了6位,所以只需要計算位置的時候先將其加上,然後再求餘即可
#格式化輸出 def my_print(total:int): # iCount = 0 # print("日t一t二t三t四t五t六") # for i in range((G(year, month) % 7)): # print(end='t') # iCount += 1 # for i in range(1, C(year, month) + 1): # print(i, end='t') # iCount += 1 # if iCount % 7 == 0: # print('') iCount = 0 print('一t二t三t四t五t六t日t') for i in range(((G(year,month) + 6) % 7)): print(end='t') iCount +=1 for i in range(1,C(year,month) + 1): print(i,end='t') iCount +=1 if iCount % 7 == 0: print('')
# -*- coding: utf-8 -*- from datetime import date import calendar # def B(year): # if year/4==0 and year/400 !=0: # return True # elif year/100 == 0 and year/400 ==0 : # return True # else: # return False #判斷閏年 def B(year): if year % 4 == 0 and year % 100 != 0 or year % 400 == 0: return True return False # def C(year:int,month:int): # days = 30 # if month in [1,3,5,7,8,10,12]: # days = 31 # elif month == 2: # if B(year): # days = 29 # else: # days = 28 # return days #每月的天數 def C(year,month): days = 31 #31天居多,設定為預設值 if month == 2 : #2月份要判斷是否是閏年 if B(year): days=29 else: days=28; elif month in [4,6,9,11]: #判斷小月,只有30天 days=30 return days #某年到1900年的天數 def D(year:int): day = 0 for i in range(1900,year): if B(i): day +=366 else: day +=365 return day #某月到1月1號的天數 def E(year:int,month:int): days = 0 for i in range(1,month): days += C(year,i) return days #確定星期幾 def G(year:int,month:int): total_day = D(year) + E(year,month) + 1 week = total_day % 7 return week #格式化輸出 def my_print(total:int): # iCount = 0 # print("日t一t二t三t四t五t六") # for i in range((G(year, month) % 7)): # print(end='t') # iCount += 1 # for i in range(1, C(year, month) + 1): # print(i, end='t') # iCount += 1 # if iCount % 7 == 0: # print('') iCount = 0 print('一t二t三t四t五t六t日t') for i in range(((G(year,month) + 6) % 7)): print(end='t') iCount +=1 for i in range(1,C(year,month) + 1): print(i,end='t') iCount +=1 if iCount % 7 == 0: print('') if __name__ == '__main__': year = int(input('請輸入年:')) month = int(input('請輸入月')) my_print(G(year,month))
因為函數多,而且計算的結果不方便去口頭的驗算其結果,也就是說當結果不對時不知道是那出現的問題時,系統提供的
from datetime import date import calendar
兩個模組中有方法可以得出其天數以及星期幾的結果,這樣就可以查詢到底是哪一步出現的問題了;也可以通過print去驗證單個的函數是否正確;
到此這篇關於python新手練習範例之萬年曆的文章就介紹到這了,更多相關python實現萬年曆內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45