Pythonで各曜日の出現回数を求める方法|サンプルコードと解説
プログラミングの練習問題などで、「ある期間の中で各曜日が何回出現するか」を求めたいことがあります。Pythonでは、曜日名のリストを定義して反復処理を行い、出現回数を順にカウントアップしていくことで簡単に実現できます。
以下に具体的な実装例を示します。
サンプルコード
def num_of_occurrence(n, first_day):
my_days = ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"]
my_count = [4 for i in range(0, 7)]
my_position = -1
for i in range(0, 7):
if first_day == my_days[i]:
my_position = i
break
inc = n - 28
for i in range(my_position, my_position + inc):
if i > 6:
my_count[i % 7] = 5
else:
my_count[i] = 5
for i in range(0, 7):
print(my_days[i], " ", my_count[i])
num = 31
first_day = "Thursday"
num_of_occurrence(num, first_day)
実行結果
Monday 4 Tuesday 4 Wednesday 4 Thursday 5 Friday 5 Saturday 5 Sunday 4
コードの解説
曜日名を格納したリスト「my_days」を定義します。
すべての曜日の出現回数を4回で初期化したカウント用リスト「my_count」を作成します。どんな月でも最低28日は存在し、28日間には各曜日が必ず4回ずつ含まれるためです。
引数として渡された開始曜日がリスト内のどの位置にあるかを調べ、そのインデックス番号を記録します。
月の日数から28を引いた値(=余分な日数)を計算します。31日の月なら3日分が余ることになります。
余分な日数分だけ、開始曜日から順にカウントを5に増やしていきます。リストの範囲を超えた場合は、剰余演算(i % 7)を使って先頭に折り返します。
最後に、すべての曜日名と対応する出現回数をコンソールに出力します。
この例では、「31日ある月の初日が木曜日(Thursday)」という条件で実行しています。その結果、木曜日・金曜日・土曜日は5回、残りの曜日は4回出現することが確認できます。
補足:calendarモジュールを使う方法
実際の日付を扱いたい場合は、Pythonの標準ライブラリ「calendar」を利用すると、より簡潔かつ正確に求められます。
import calendar
year, month = 2024, 1
counts = [0] * 7
for day in range(1, calendar.monthrange(year, month)[1] + 1):
counts[calendar.weekday(year, month, day)] += 1
days = ["月", "火", "水", "木", "金", "土", "日"]
for name, cnt in zip(days, counts):
print(name + "曜日:", cnt, "回")
calendar.weekday() 関数は月曜日を0、日曜日を6として返すため、日本語の曜日リストとそのまま対応付けられます。この方法なら、任意の年・月に対して実際のカレンダーに基づいた正確な出現回数を取得できます。
-
Pythonで日付から「年の何日目か」を求める方法
「YYYY-MM-DD」形式の日付が与えられたとき、その日がその年の何日目にあたるかを返すプログラムを考えてみましょう。たとえば、日付が「2019-02-10」であれば、これはその年の41日目に相当します。 解決のための手順 この問題は、以下のステップで解くことができます。 各月の日数を格納した配列Dを用意します。例:[0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31] 日付文字列を年・月・日のリストに変換します。 うるう年の場合は、2月の日数を29日に変更します。 1月から(対象の月 − 1)までの累積日数を合計し、そこに「日」の数を加えて
-
Pythonで数の約数(因数)を見つける方法をわかりやすく解説
基本的な考え方ある数の約数(因数)を見つけるには、1からその数自身までのすべての整数に対して、割り切れるかどうかを順番に確認するループを実行します。Pythonの剰余演算子「%」を使い、割った余りが0になれば、その数は約数であると判断できます。サンプルコードnum = int(input(enter a number)) factors = [] for i in range(1, num + 1): if num % i == 0: factors.append(i) print(Factors of {} = {}.format(num, factors))この