版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第python新手練習實例之萬年歷目錄一、題目描述二、解析1、分析2、功能三、源碼四、經驗總結
一、題目描述
A:先輸出提示語句,并接受用戶輸入的年、月。
B:根據(jù)用戶輸入的年,先判斷是否是閏年。
C:根據(jù)用戶輸入的月來判斷月的天數(shù)。
D:用循環(huán)計算用戶輸入的年份距1900年1月1日的總天數(shù)。
E:用循環(huán)計算用戶輸入的月份距輸入的年份的1月1日共有多少天。
F:相加D與E的天數(shù),得到總天數(shù)。
G:用總天數(shù)來計算輸入月的第一天的星期數(shù)。
H:根據(jù)G的值,格式化輸出這個月的日歷!
二、解析
1、分析
根據(jù)題目的八個要求,可以看出有些功能是重復或者說需要相互調用的,所以可以用模塊的思想將每個要求封裝成函數(shù);
2、功能
①判斷是否是閏年函數(shù)
根據(jù)閏年的判斷規(guī)則,如果年是4的倍數(shù),但不是100的倍數(shù)則是閏年或者是400的整數(shù)倍也是閏年,所以函數(shù)需要傳入一個參數(shù)(年份)
#判斷閏年
defB(year):
ifyear%4==0andyear%100!=0oryear%400==0:
returnTrue
returnFalse
②判斷輸入月的天數(shù)的函數(shù)
除了2月份會根據(jù)平年和閏年發(fā)生變化以外,每月的天數(shù)是已經確定好的;所以此時需要調用已經定義好的判斷閏年的函數(shù)才能確定二月的天數(shù);所以函數(shù)需要傳入兩個參數(shù)(月份和年份)
此時有兩個小技巧,一個是判斷月份是那月,最開始用的是用相等加上or去判斷是否滿足條件,其實可以將大月或者小月的月份寫到一個列表中,然后再通過in去判斷;第二個是在確定天數(shù)時,可以先定義好一個常用值,然后根據(jù)月份去修改其值,最后返回常用值即可,這樣就少了幾行的賦值以及返回的代碼
defC(year,month):
days=31#31天居多,設置為默認值
ifmonth==2:#2月份要判斷是否是閏年
ifB(year):
days=29
else:
days=28;
elifmonthin[4,6,9,11]:#判斷小月,只有30天
days=30
returndays
③計算年份距離1900的總天數(shù)的函數(shù)
因為平年跟閏年的天數(shù)不一樣,所以要調用判斷閏年的函數(shù),確定其一年的總天數(shù);
總天數(shù)也就是相當于求每年的天數(shù)之和即可;所以需要去遍歷每年的天數(shù)求其總和即為結果;所以函數(shù)需要傳入一個參數(shù)(年份)
#某年到1900年的天數(shù)
defD(year:int):
day=0
foriinrange(1900,year):
ifB(i):
day+=366
else:
day+=365
returnday
④月份距離1月1日的天數(shù)的函數(shù)
距離1月1日的天數(shù)也就是每月天數(shù)的總和,此時就先需要確定其每月的天數(shù),也就是需要調用之前定義的函數(shù),還需要知道的是其年份判斷是否閏年,所以函數(shù)需要傳入兩個參數(shù)(年份和月份)
遍歷每月的天數(shù)(通過調用函數(shù)而來),然后將其求和,得到的就是需要的結果
#某月到1月1號的天數(shù)
defE(year:int,month:int):
days=0
foriinrange(1,month):
days+=C(year,i)
returndays
⑤確定星期幾的函數(shù)
首先通過調用求年份距離的天數(shù)和月份的天數(shù)得到其天數(shù)總和,所以函數(shù)需要傳入兩個參數(shù)(月份和年份)
然后將總和加一(因為得到的是月份,而算天數(shù)時要獎當日計算再內),然后對7求余即為星期幾
#確定星期幾
defG(year:int,month:int):
total_day=D(year)+E(year,month)+1
week=total_day%7
returnweek
⑥格式化輸出日歷函數(shù)
輸出有兩種格式,一種是星期日在第一天,一種是星期日在最后一天;
第一種方式:星期日在第一天,根據(jù)得到的星期幾函數(shù)(也就是當月1號的星期幾函數(shù)),可以確定第一天的位置(也就是1的位置);
日歷也就是輸出1到總天數(shù)(根據(jù)月份確定)在對應的位置(星期幾),由于1號的位置已經確定,而一號前面的則為空,所以單獨遍歷輸出空格,然后再輸出日歷;
一周對應的是七天,也就是每七天進行一次換行,所以還需要定義一個計數(shù)器
第二種方式:也就是星期日在最后一天,其他邏輯都是一樣的,只是在確定1號的位置不一樣;
本來周日的位置為第一個,但是現(xiàn)在變成了最后一個,也就是位置向后移了6位,所以只需要計算位置的時候先將其加上,然后再求余即可
#格式化輸出
defmy_print(total:int):
#iCount=0
#print("日\t一\t二\t三\t四\t五\t六")
#foriinrange((G(year,month)%7)):
#print(end='\t')
#iCount+=1
#foriinrange(1,C(year,month)+1):
#print(i,end='\t')
#iCount+=1
#ifiCount%7==0:
#print('')
iCount=0
print('一\t二\t三\t四\t五\t六\t日\t')
foriinrange(((G(year,month)+6)%7)):
print(end='\t')
iCount+=1
foriinrange(1,C(year,month)+1):
print(i,end='\t')
iCount+=1
ifiCount%7==0:
print('')
三、源碼
#-*-coding:utf-8-*-
fromdatetimeimportdate
importcalendar
#defB(year):
#ifyear/4==0andyear/400!=0:
#returnTrue
#elifyear/100==0andyear/400==0
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 礦山生產安全部管理制度
- 安全生產糾正與改進制度
- 加油站生產安全管理規(guī)章制度
- 湖北省安全生產總監(jiān)制度
- 化妝品委托生產訂單制度
- led驅動生產管理制度
- pcr生產車間工作服管理制度
- 電鍍廠安全生產規(guī)章制度
- 防水工程安全生產制度
- 安全生產內部報告獎勵制度
- 2024年全國職業(yè)院校技能大賽(節(jié)水系統(tǒng)安裝與維護賽項)考試題庫(含答案)
- 24秋人教版英語七上單詞表(Vocabulary in Each Unit)總表
- ISO 15609-1 2019 金屬材料焊接工藝規(guī)程和評定-焊接工藝規(guī)程-電弧焊(中文版)
- 肥胖患者麻醉管理
- 小鯉魚跳龍門電子版
- 2019年急性腦梗死出血轉化專家共識解讀
- 《混凝土結構工程施工規(guī)范》
- 土地證延期申請書
- 硫乙醇酸鹽流體培養(yǎng)基適用性檢查記錄
- 進階切分技法advanced funk studies rick latham-藍色加粗字
- GB 19079.12-2013體育場所開放條件與技術要求第12部分:傘翼滑翔場所
評論
0/150
提交評論