質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.47%
DateTime

多くのプログラミング言語におけるDateTimeオブジェクトは、日付と時間に関する演算と出力を行います。

import

自身のプラットフォーム・プログラム・データセットに対して、外部ソースを取り込むプロセスをimportと呼びます。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

2回答

2179閲覧

pythonのcalendarクラスなしでカレンダーを作るには

yunaojus

総合スコア14

DateTime

多くのプログラミング言語におけるDateTimeオブジェクトは、日付と時間に関する演算と出力を行います。

import

自身のプラットフォーム・プログラム・データセットに対して、外部ソースを取り込むプロセスをimportと呼びます。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2022/07/02 03:57

編集2022/07/02 04:09

Calendar, TextCalendarクラスなどで用意されているカレンダー表示用の関数を使わずに、指定された西暦年、月のカレンダーをターミナルに表示するPythonのプログラムを記述する方法についてです。ヒントとして、datetimeクラスのオブジェクトでその月の1日の曜日を求めるそうです。カレンダーの最上部には、月と西暦年がJanuary 2022のように表示されるように作ります。また、曜日のタイトルとして「Sun Mon Tue Wed Thu Fri Sat」が次の行に表示され、その後、日が表示されるようにしたいです。

以下のように、年月をinputで6桁入力し、yearとmonthに分けてisoweekdayでその月の1日の曜日を求めるところまではできたのですが、その曜日を使ってどのように指定された西暦年、月のカレンダーができるのかがわかりませんでした。ヒントやご指導を頂けますと幸いです。

python

1from datetime import* 2#西暦年、月を入力 3ym = int(input("年月を6桁の整数で入力 : ")) 4#年と月に分ける 5yyyy,mm = ym//100, ym%100 6 7#指定された月の1日とその曜日 8day1 = date(yyyy,mm,1) 9#月曜日を1 ~ 日曜日を7 10day2= day1.isoweekday() 11 12#最上部へのタイトル表示 13print(yyyy,mm) 14print( "Sun Mon Tue Wed Thu Fri Sat" ) 15 16if day2 = 17 18 19 20#以下を活かせそうだけど、どのようにすればよいか迷い中 21#offset = 3 22#for _ in range(offset):print( end=" " ) 23#for day in range(1,32): 24# print(f"{day:3} ", end="") 25# if (offset+day)%7 == 0:print() 26#print()

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

  1. 1日の曜日から、その週の土曜日の日付がわかります
  2. その次の日の日曜からその週の土曜日の日付もわかるでしょう。
  3. あとはその月の最終日まで、2を繰り返します

ってことで、これで週単位の日付がわかるので、それを順番に表示していけばいいです

投稿2022/07/02 04:27

y_waiwai

総合スコア87784

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yunaojus

2022/07/02 07:12

無事解決することができました! とてもわかりやすく、ありがとうございました!
guest

0

1.指定月の日の曜日を取得し、最初に印字する空白数を算出します。(日曜日なら0、月曜日なら4、火曜日なら8・・・)
2.月末日を算出します。
3.1日から月末日まで、下記を繰り返します。
日を印字(3桁右寄せ)+空白1桁
土曜日なら、改行印字

python3

1from datetime import* 2#西暦年、月を入力 3ym = int(input("年月を6桁の整数で入力 : ")) 4#年と月に分ける 5yyyy,mm = ym//100, ym%100 6 7#指定された月の1日とその曜日 8day1 = date(yyyy,mm,1) 9#月曜日を1 ~ 日曜日を7 10day2= day1.isoweekday() 11#最初の空白数を計算する 12if day2 == 7: 13 day2 = 0 14space = " " * 4 * day2 15#月末日を求める 16nextmm = mm + 1 17nextyyyy = yyyy 18if nextmm == 13: 19 nextmm = 1 20 nextyyyy = yyyy + 1 21nextday1 = date(nextyyyy,nextmm,1) 22lastday1 = nextday1 - timedelta(days = 1) 23 24#最上部へのタイトル表示 25print(yyyy,mm) 26print( "Sun Mon Tue Wed Thu Fri Sat" ) 27#最初の空白を印字 28print(space,end='') 29for dd in range(1,lastday1.day+1): 30 #1日分を3桁右寄せで印字し、そのあとに空白を1文字印字 31 print('{:>3d}'.format(dd),end='') 32 print(' ',end='') 33 #土曜日の場合、改行を行う 34 if date(yyyy,mm,dd).isoweekday() == 6: 35 print('') 36

実行結果

年月を6桁の整数で入力 : 202207 2022 7 Sun Mon Tue Wed Thu Fri Sat 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31

投稿2022/07/02 07:52

tatsu99

総合スコア5462

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.47%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問