python新手練習實例之萬年歷_第1頁
python新手練習實例之萬年歷_第2頁
python新手練習實例之萬年歷_第3頁
python新手練習實例之萬年歷_第4頁
python新手練習實例之萬年歷_第5頁
已閱讀5頁,還剩2頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

第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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論