91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

python怎么實現萬年歷

發布時間:2022-05-19 14:55:39 來源:億速云 閱讀:452 作者:iii 欄目:開發技術

這篇“python怎么實現萬年歷”文章的知識點大部分人都不太理解,所以小編給大家總結了以下內容,內容詳細,步驟清晰,具有一定的借鑒價值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來看看這篇“python怎么實現萬年歷”文章吧。

一、題目描述

A:先輸出提示語句,并接受用戶輸入的年、月。

B:根據用戶輸入的年,先判斷是否是閏年。

C:根據用戶輸入的月來判斷月的天數。

D:用循環計算用戶輸入的年份距1900年1月1日的總天數。

E:用循環計算用戶輸入的月份距輸入的年份的1月1日共有多少天。

F:相加D與E的天數,得到總天數。

G:用總天數來計算輸入月的第一天的星期數。

H:根據G的值,格式化輸出這個月的日歷!

二、解析

1、分析

根據題目的八個要求,可以看出有些功能是重復或者說需要相互調用的,所以可以用模塊的思想將每個要求封裝成函數;

2、功能

①判斷是否是閏年函數

根據閏年的判斷規則,如果年是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怎么實現萬年歷”這篇文章的內容,相信大家都有了一定的了解,希望小編分享的內容對大家有幫助,若想了解更多相關的知識內容,請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

米易县| 青海省| 庆安县| 白山市| 盘山县| 贞丰县| 临武县| 潜山县| 井研县| 明水县| 五莲县| 揭东县| 平安县| 新营市| 磴口县| 乌拉特前旗| 海安县| 保靖县| 甘谷县| 贡觉县| 安岳县| 通江县| 嘉祥县| 漳州市| 澎湖县| 渝北区| 泉州市| 龙胜| 比如县| 光山县| 库伦旗| 彝良县| 铅山县| 霍山县| 改则县| 明溪县| 甘泉县| 游戏| 沙洋县| 常德市| 周至县|