Python実例教程の検索出力月カレンダー


一、テーマの要求と分析
入力した年と月によって、その月のカレンダーが印刷されます。図のように:
是有那么一点丑撒,你要愿意可以手动完善一下
問題の分析:複雑な問題は往々にして簡単で、分割点を見つけるだけでいいです。このような問題は三つの関数に分けられます。
  関数1:計算して、ある年のある月のある日は何曜日ですか?
  関数2:ある年が閏年かどうかを判断する。
  関数3:印刷した年月日のカレンダー。
emmm…このような分析は多くの人が関心を持つことを引き起こすかもしれません。そうです。あなたの今の考えは完全に正しいです。ある日が何曜日かを判定するのは毎月の1日が何曜日かを知るためです。それは閏年かどうかを判定するのは、2月という特殊な存在があるからです。最後に印刷するのです。はい、プリントしないとどう思いますか?
准备好了吗?
便宜上、ここで直接に関数の名前を与えます。
  関数1:day(y,m,d)――yは年で、mは月で、dは天です。
  関数2:isLeaphYear――このような小さいラクダの命名方法に注意して、一見正規軍です。
  関数3:careendar(y,m)――印刷、印刷、ここでは多くのフォーマットの問題が発生します。
二、まずソースコードを見てください。
手作業で作ったものです。見たくなくてもいけません。今日は研究してから行きます。

def day(y, m, d):#  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 #             
 return isLeapYear

def calendar(y, m): #  y m   
 print(' {} {} '.format(y,m))
 print('Su\tM\tTu\tW\tTh\tF\tSa')
 #         
 # ********** Begin ********** #
 month_1 = [1,3,5,7,8,10,12]
 month_2 = [4,6,9,11]
 momth_number = 0
 if isLeapYear(y): #         
 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('---------------------------')

三、私達は一つずつfenxiに来ます。
(1)day(y,m,d)関数
この関数には実質的な技術的な内容はありません。ここでは数学の問題に触れています。例えば、直接数学式を使います。この関数で使う3つの数学式を提供します。

y,m,dが与えられたら、上のd 0は要求の曜日です。
注意:日曜日の代表数字は0です。覚えてください。でも、どうやって分かりますか?
関数はこのように出てきました。

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)disLeapper関数
閏年の判断についてはよく知っています。ここではフローチャートを提供します。

注意:1.必ず「=」と「=」の違いを知ってください。えっと、これは全部前車の鑑です。
整除できる条件はyear/4=0ではなく、year%4=0です。混ぜ合わないようにしてください。
  注意:3.Pythonでは、「/」と「/」の違いがあり、前者は浮動小数点演算であり、後者は整数演算である。
注意:4.PythonはTrueとFalseのキーワードを持っています。もう0と1を書く必要はありません。
ここのコードのスタイルを強調しています。どのスペースがどこに入るべきですか?正規軍をしなければなりません。
関数もこのように出てきました。

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 #             
 return isLeapYear
(3)Celendar(y,m)関数

ここで二つの問題を解決します。つまり今回のプログラムの核心です。
今月は何日間ですか?
どのようにして改行と曜日の対応ができますか?
第二の問題については、しばらくいらいらさせられました。

1.今月は何日間ですか?
   はこの神が来たことに対してあまりプレッシャーを感じていません。閏年であるかどうかはすでに判定されています。関数を呼べば、今月は何日かが確認できます。はい、ここでコープしてみます。閏年の二月は29日で、平年の二月は28日です。
強調したいのは:
月は31日と30日の違いがあります。ここで直接に二つのリストを使います。1とモノノス2)選択判断を行う;
イLeapaYear関数の戻り値はTrueとFalseなので、判断する時に直接にif isLeapeYear(y)を使いました。閏年ならどうすればいいですか?
二月という特殊な月を覚えておいて、単独で判断します。
  4.月の日数をmonoth_という名前に置いておきました。numberの変数は、一目瞭然ですか?t、k、lなどの変数名を使っているなら、できるだけ早く専門化に進みましょう。
これらの原理に基づいて、今月は何日間あるかを書きました。
2.どうやって改行したらいいですか?曜日に対応できますか?
私たちはこの図をもう一方に置きます。

覚えています。日曜日の数字は0ですか?実はそのいくつかの公式が実行された結果ですが、まさにこの結果です。私は突然重要な規則を発見しました。
周は何曜日ですか?最初はテーブルがいくつありますか?
  このような話は私達はやはり分刻みで行きます。
  の第一歩は一ヶ月の日数を全部一本の横線に並べています。この横線の独特なところは最初の部分にいくつかのテーブルがあります。ここで二つの問題を解決します。
1.Pythonデフォルトは改行印刷ですが、どうやって改行しないといけませんか?――end=“”文を追加
2.どうやって行頭のテーブルを決められますか?――「\t」を追加します。ケーブルは私が定義した変数です。今月1日は何曜日ですか?という意味です。何曜日ですか?テーブルがあります。
第二ステップは7行目の改行の問題について考え始めました。ここでは型を取って戦いを解決します。
だから下の一連のフォーマットの出力があります。

 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")
注意:
  1.range(a,b,c)関数は非常に柔軟に使用できます。aは開始を表します。bは終了を表します。cはステップを表します。ここでは終了条件はその数を含まないことを覚えてください。例えば、range(1,10,1)は9までしかないです。
  2.7に改行する時、どうやって最初の行に追加するテーブルと干渉しないですか?ここで私は一つの信号量jを使っています。jが1になると最初の行と説明します。テーブルを追加する必要があります。1に等しくないなら、ケーブルを入れなくてもいいです。
  3.数字で判断する場合もありますが、文字列で操作する場合もありますが、どうやって往復しますか?str()関数は数字を文字列に変換し、eval()関数は文字列を数字に変換します。
  4.文字列の接続は「+」のコネクタを使います。
  5.\tも改行の意味がありますが、具体的な効果はどうですか?ここはもううるさくないので、自分で試してみたら分かります。
四、最後に今回の運行結果をお送りします。
あまりきれいではないことは知っていますが、それはなんですか?とりあえず我慢してください。

ここでPython検索出力月カレンダーに関する記事を紹介します。Python検索出力月カレンダーの内容は以前の文章を検索してください。または下記の関連記事を引き続きご覧ください。これからもよろしくお願いします。