最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python實(shí)例教程之檢索輸出月份日歷表

 更新時(shí)間:2020年12月16日 16:30:31   作者:Lanyan9  
這篇文章主要給大家介紹了關(guān)于Python實(shí)例教程之檢索輸出月份日歷表的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

一、題目要求與分析

根據(jù)輸入的年和月,打印該月的日歷。如圖所示:

是有那么一點(diǎn)丑撒,你要愿意可以手動(dòng)完善一下

題目分析:復(fù)雜的問(wèn)題往往很簡(jiǎn)單,只需要找到拆分點(diǎn)即可,就像這種題可以分為三個(gè)函數(shù):

   函數(shù)1: 計(jì)算并返回某年某月某日是星期幾;

   函數(shù)2: 判斷某年是否是閏年;

   函數(shù)3:打印所給年月的日歷.

emmm……這么一分析可能會(huì)引起很多人若有所思,對(duì)的,你的現(xiàn)在的思路完全正確,之所以要判定某一個(gè)日子是星期幾是因?yàn)槲覀円烂吭碌?號(hào)是周幾才行(注意找日歷的規(guī)律),那之所以要判定是否是閏年是因?yàn)橛辛硕路葸@一特殊的存在,最后之所以要打印,好吧,你不打印我怎么看。

準(zhǔn)備好了嗎?

為了方便起見(jiàn),我們?cè)谶@里直接把函數(shù)的名字給定一下:

  函數(shù)1:day(y, m, d)——y為年,m為月,d為天

  函數(shù)2: isLeapYear(year)——注意這種小駝峰的命名方式,一看就是正規(guī)軍

  函數(shù)3:calendar(y, m)——打印,打印,這里會(huì)遇到很多格式性問(wèn)題

二、先看源代碼

純手工打造,你不喜歡看也不得行,今天你需要把它研究一波再走咯~

def day(y, m, d):#計(jì)算y年m月d日是星期幾

 y0 = y - (14 - m)//12
 x = y0 + y0//4 - y0//100 + y0 //400
 m0 = m + 12*((14 - m)//12) - 2
 d0 = (d + x + 31*m0//12) % 7
 return d0 #注意,周日是0

def isLeapYear(year): #判斷year年是否閏年
 isLeapYear = True 
 if year % 4 ==0: #整除可不是等于0,天
 if year % 100 ==0:
 if year % 400 ==0:
 isLeapYear = True
 else:
 isLeapYear = False
 else:
 isLeapYear = True 
 else:
 isLeapYear = False #注意是一個(gè)等號(hào)還是兩個(gè)等號(hào)
 return isLeapYear

def calendar(y, m): #打印y年m月日歷
 print(' {}年{}月'.format(y,m))
 print('Su\tM\tTu\tW\tTh\tF\tSa')
 # 請(qǐng)?jiān)谙旅婢帉?xiě)代碼
 # ********** Begin ********** #
 month_1 = [1,3,5,7,8,10,12]
 month_2 = [4,6,9,11]
 momth_number = 0
 if isLeapYear(y): #計(jì)算這個(gè)月有多少天
 if m == 2:
 month_number = 29
 else:
 if m in month_1:
 month_number = 31
 if m in month_2:
 month_number = 30
 else:
 if m == 2:
 month_number = 28
 else:
 if m in month_1:
 month_number = 31
 if m in month_2:
 month_number = 30 
 
 table = day(y, m, 1) #空格 排列輸出
 for j in range (1,month_number + 1): #注意加一
 if j == 1:
 print("\t" * table,end = '')
 j = str(j)
 print(j + "\t",end = '')
 j = eval(j)
 if (j + day(y, m, 1)) % 7 == 0:
 print("\r")
 print("\r")
 
for (y,m) in [(2020,12), (2017,2), (2016,2)]:
 calendar(y, m)
 print('---------------------------')

三、我們來(lái)逐個(gè)fenxi

(1) day(y, m, d)函數(shù)

這個(gè)函數(shù)沒(méi)有什么實(shí)質(zhì)性的技術(shù)含量,因?yàn)檫@里涉及到一個(gè)數(shù)學(xué)的問(wèn)題,比如,直接用數(shù)學(xué)公式,下邊我提供一下本函數(shù)用的三個(gè)數(shù)學(xué)公式:

假如給定了y,m,d,則上邊的d0就是要求的星期幾。

注意:星期日代表的數(shù)字是0,切記,但別問(wèn)我咋知道的。

函數(shù)就這樣出來(lái)了:

def day(y, m, d):
 y0 = y - (14 - m)//12
 x = y0 + y0//4 - y0//100 + y0 //400
 m0 = m + 12*((14 - m)//12) - 2
 d0 = (d + x + 31*m0//12) % 7
 return d0 

(2) disLeapYear(year)函數(shù)

關(guān)于判斷閏年這件事想必很好知曉,這里我提供一張流程結(jié)構(gòu)圖僅供參考:

  注意:1. 一定要曉得“=”和“ == ”的區(qū)別,唉,這都是前車之鑒啊;

  注意:2. 能被整除的條件可不是year // 4 = = 0, 而是year % 4 == 0,切記不要弄混;

  注意:3. Python里“/”和“//”有區(qū)別,前者為浮點(diǎn)數(shù)運(yùn)算,后者為整數(shù)運(yùn)算;

  注意:4. Python自帶True和False關(guān)鍵字使用,再也不用寫(xiě)0和1進(jìn)行判斷了;

  注意:5. 在強(qiáng)調(diào)一下這里的代碼風(fēng)格,哪個(gè)該空格哪里該縮進(jìn),一定要做一個(gè)正規(guī)軍。

函數(shù)也是這么出來(lái)了:

def isLeapYear(year): #判斷year年是否閏年
 isLeapYear = True 
 if year % 4 ==0: #整除可不是等于0,天
 if year % 100 ==0:
  if year % 400 ==0:
  isLeapYear = True
  else:
  isLeapYear = False
 else:
  isLeapYear = True 
 else:
 isLeapYear = False #注意是一個(gè)等號(hào)還是兩個(gè)等號(hào)
 return isLeapYear

(3) calendar(y, m)函數(shù)

這里要解決兩個(gè)問(wèn)題,也就是本次程序的核心:

  1. 這個(gè)月有多少天?

  2. 怎么才能做到換行與星期幾相對(duì)應(yīng)?

不得不說(shuō)第二個(gè)問(wèn)題讓我焦灼了好一會(huì)兒~


1 . 這個(gè)月有多少天?

  對(duì)于這一神來(lái)之問(wèn)沒(méi)有太多的壓力,因?yàn)槭遣皇情c年都已經(jīng)判定好了,只需調(diào)用一下函數(shù)就可以斷定這個(gè)月份是多少天,好吧,此外在這里科普一下,閏年的二月是29天,平年的二月是28天。

我需要強(qiáng)調(diào)的是:

  1. 月份有31天和30天的區(qū)別,這里我直接用兩個(gè)列表(month_1和month_2)進(jìn)行選擇判斷;

  2. 因?yàn)閕sLeapYear()函數(shù)返回值是True和False,所以在進(jìn)行判斷的時(shí)候我直接用了if isLeapYear(y): 意味著如果是閏年我要怎么著怎么著;

  3. 一定要記得二月這個(gè)特殊的月份,要單獨(dú)進(jìn)行一次判斷;

  4. 注意我把月份的天數(shù)放在了一個(gè)名叫month_number的變量里,是不是一目了然?如果你還在用t, k, l之類的變量名,盡快向?qū)I(yè)化邁進(jìn)吧!

根據(jù)這些原理,我寫(xiě)出了這個(gè)月有多少天:

2 . 怎么才能做到換行與星期幾相對(duì)應(yīng)?

我們還把這個(gè)圖重新放一邊:

  還記得我說(shuō)過(guò)周日對(duì)應(yīng)的數(shù)字是0不?其實(shí)是那幾個(gè)公式運(yùn)行出來(lái)的結(jié)果,但正是這一結(jié)果,我突然發(fā)現(xiàn)了一個(gè)很重要的規(guī)律:

  星期是幾,最開(kāi)始的時(shí)候就有幾個(gè)table

  這樣的話我們還是分步來(lái)走:

  第一步我們把一個(gè)月的天數(shù)全部排成一條橫線(這里就不展示了,想象一下),而這個(gè)橫線的獨(dú)特之處在于最開(kāi)始的部分有幾個(gè)table是不確定的,這里要解決兩個(gè)問(wèn)題:

1 . Python默認(rèn)是換行打印,怎么才能不換行?———添加 end = “” 語(yǔ)句

2 . 怎么才能使行首的table確定下來(lái)呢?———添加“\t” * table (注意,代碼里的table是我定義的一個(gè)變量,表示該月1號(hào)是周幾),意味著是星期幾,就有幾個(gè)table

第二步我們就開(kāi)始考慮逢7換行的問(wèn)題了,這里我采用取模運(yùn)算,一下解決戰(zhàn)斗。

所以有了下邊的一串兒格式輸出:

 table = day(y, m, 1) #求空格數(shù)
 for j in range (1,month_number + 1): #注意加一
 if j == 1:
  print("\t" * table,end = '')
 j = str(j)
 print(j + "\t",end = '')
 j = eval(j)
 if (j + day(y, m, 1)) % 7 == 0:
  print("\r")
 print("\r")

注意:

  1. range(a,b,c)函數(shù)可以用的很靈活,a表示起始,b表示終止,c表示步長(zhǎng),這里要記得終止條件是不包括那個(gè)數(shù)的,比如range(1, 10 ,1 ), 則只能到9;

  2. 逢7換行的時(shí)候如何與首行要添加的table互不干擾呢?這里我運(yùn)用了一個(gè)信號(hào)量j, 當(dāng)j等于1的時(shí)候說(shuō)明是第一行,需要添加table,不等于1就不用加table了;

  3. 有時(shí)候要用數(shù)字判斷,有時(shí)候要用字符串操作,怎么才能來(lái)回轉(zhuǎn)換呢?str()函數(shù)使數(shù)字轉(zhuǎn)為字符串,eval()函數(shù)使字符串轉(zhuǎn)為數(shù)字;

  4.字符串連接要用“+”連接符;

  5. \t 和 \n 都有換行的意思,但具體效果如何,這里就不再多啰嗦了,親自試試就知道啦。

四、最后奉上本次的運(yùn)行結(jié)果

我知道不咋好看,不過(guò)那個(gè)啥,先將就著吧

到此這篇關(guān)于Python檢索輸出月份日歷表的文章就介紹到這了,更多相關(guān)Python檢索輸出月份日歷表內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • python模擬登錄并且保持cookie的方法詳解

    python模擬登錄并且保持cookie的方法詳解

    模擬登錄相信對(duì)大家來(lái)說(shuō)都不陌生,下面這篇文章主要給大家介紹了關(guān)于python模擬登錄并且保持cookie的方法,文中介紹的非常詳細(xì),對(duì)大家具有一定的參考價(jià)值,需要的朋友們下面來(lái)一起看看吧。
    2017-04-04
  • Python開(kāi)發(fā)之快速搭建自動(dòng)回復(fù)微信公眾號(hào)功能

    Python開(kāi)發(fā)之快速搭建自動(dòng)回復(fù)微信公眾號(hào)功能

    這篇文章主要介紹了Python開(kāi)發(fā)之快速搭建自動(dòng)回復(fù)微信公眾號(hào)功能的相關(guān)資料,需要的朋友可以參考下
    2016-04-04
  • Python實(shí)現(xiàn)將Unicode轉(zhuǎn)換為ASCII

    Python實(shí)現(xiàn)將Unicode轉(zhuǎn)換為ASCII

    這篇文章主要為大家詳細(xì)介紹了系統(tǒng)編碼的不同方法以及如何利用Python實(shí)現(xiàn)將Unicode轉(zhuǎn)換為?ASCII,文中的示例代碼講解詳細(xì),有需要的小伙伴可以學(xué)習(xí)一下
    2023-10-10
  • python3結(jié)合openpyxl庫(kù)實(shí)現(xiàn)excel操作的實(shí)例代碼

    python3結(jié)合openpyxl庫(kù)實(shí)現(xiàn)excel操作的實(shí)例代碼

    這篇文章主要介紹了python3結(jié)合openpyxl庫(kù)實(shí)現(xiàn)excel操作的實(shí)例代碼,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2018-09-09
  • tensorflow實(shí)現(xiàn)KNN識(shí)別MNIST

    tensorflow實(shí)現(xiàn)KNN識(shí)別MNIST

    這篇文章主要為大家詳細(xì)介紹了tensorflow實(shí)現(xiàn)KNN識(shí)別MNIST,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-03-03
  • pytorch程序異常后刪除占用的顯存操作

    pytorch程序異常后刪除占用的顯存操作

    今天小編就為大家分享一篇pytorch程序異常后刪除占用的顯存操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-01-01
  • Python算法應(yīng)用實(shí)戰(zhàn)之棧詳解

    Python算法應(yīng)用實(shí)戰(zhàn)之棧詳解

    棧是什么,你可以理解為一種先入后出的數(shù)據(jù)結(jié)構(gòu)(First In Last Out),一種操作受限的線性表。下面這篇文章主要給大家介紹了Python中棧的應(yīng)用實(shí)戰(zhàn),文中給出了多個(gè)實(shí)例,需要的朋友可以參考借鑒,下面來(lái)一起看看吧。
    2017-02-02
  • Pandas中DataFrame基本函數(shù)整理(小結(jié))

    Pandas中DataFrame基本函數(shù)整理(小結(jié))

    這篇文章主要介紹了Pandas中DataFrame基本函數(shù)整理(小結(jié)),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • 用Python寫(xiě)一個(gè)自動(dòng)木馬程序

    用Python寫(xiě)一個(gè)自動(dòng)木馬程序

    這篇文章主要介紹了用Python寫(xiě)一個(gè)自動(dòng)木馬程序的方法,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-09-09
  • python工具dtreeviz決策樹(shù)可視化和模型可解釋性

    python工具dtreeviz決策樹(shù)可視化和模型可解釋性

    這篇文章主要介紹了python工具dtreeviz決策樹(shù)可視化和模型可解釋性,決策樹(shù)是梯度提升機(jī)和隨機(jī)森林的基本構(gòu)建塊,在學(xué)習(xí)這些模型的工作原理和模型可解釋性時(shí),可視化決策樹(shù)是一個(gè)非常有幫助,下文相關(guān)資料,需要的小伙伴可任意參考一下
    2022-03-03

最新評(píng)論

江津市| 兴海县| 南乐县| 卢湾区| 鹤庆县| 那曲县| 酒泉市| 临夏市| 万州区| 会同县| 马鞍山市| SHOW| 宽城| 额敏县| 高雄市| 三穗县| 民权县| 怀远县| 康定县| 密山市| 东源县| 丹东市| 定远县| 保靖县| 泾阳县| 东宁县| 商水县| 平安县| 化德县| 光山县| 绍兴县| 四川省| 洛隆县| 彭阳县| 清河县| 东平县| 辽宁省| 夹江县| 德格县| 航空| 蓬莱市|