吉凶数(西暦年月日の各桁数を合計した数字)を計算するpythonコード

西暦年月日の各桁数を合計した数字を吉凶数というらしいです。完全にオカルトですが、そうはいっても、縁起の悪い数字は避けたかったり、逆に何か大事な数字を決める際は、一応、良いとされる数字にしてみたかったり。

 

ということで、暇つぶしに吉凶数を計算するpythonコード。(計算してくれるWebサイト/アプリなどもありますが)

 

吉凶数計算

超シンプルに。


# 数字入力
number = input("数字を入力:")

# 各桁を足す
total = sum(int(digit) for digit in number)

# 結果表示
print(f"{number} -> 各桁の合計は {total} ")
    

例えば、自分の生まれた生年月日とかを入れてみます。下記はサンプルで、私の実年齢ではありません。

吉凶数の出現回数のカウント

吉凶数の出現回数をカウントするコード。西暦年月日で開始と終了を指定する。


from datetime import datetime, timedelta
from collections import Counter

start_date_str = input("開始日(YYYY-MM-DD)を入力:")
end_date_str = input("終了日(YYYY-MM-DD)を入力:")

start_date = datetime.strptime(start_date_str, "%Y-%m-%d")
end_date = datetime.strptime(end_date_str, "%Y-%m-%d")

totals = []

current_date = start_date
while current_date <= end_date:
    date_str = current_date.strftime("%Y%m%d")
    
    total = sum(int(digit) for digit in date_str)
    totals.append(total)

    current_date += timedelta(days=1)

count_totals = Counter(totals)


print("吉凶数と出現回数:")
for total, count in sorted(count_totals.items()):
    print(f"{total}: {count}回")

結果は以下の通り。西暦1年1月1日から2100年12月31日まで。

3: 16回
4: 80回
5: 248回
6: 574回
7: 1112回
8: 1923回
9: 3069回
10: 4631回
11: 6680回
12: 9282回
13: 12446回
14: 16108回
15: 20163回
16: 24470回
17: 28887回
18: 33236回
19: 37328回
20: 40948回
21: 43872回
22: 45898回
23: 46907回
24: 46866回
25: 45822回
26: 43851回
27: 41065回
28: 37605回
29: 33648回
30: 29396回
31: 25072回
32: 20883回
33: 16985回
34: 13470回
35: 10390回
36: 7775回
37: 5630回
38: 3937回
39: 2656回
40: 1727回
41: 1078回
42: 638回
43: 351回
44: 175回
45: 76回
46: 27回
47: 7回
48: 1回
csvファイルに出力

Excelとかスプレッドシートで扱いたいのでcsvにも出力


from datetime import datetime, timedelta
from collections import Counter
import csv


start_date_str = input("開始日(YYYY-MM-DD):")
end_date_str = input("終了日(YYYY-MM-DD):")

start_date = datetime.strptime(start_date_str, "%Y-%m-%d")
end_date = datetime.strptime(end_date_str, "%Y-%m-%d")

totals = []

current_date = start_date
while current_date <= end_date:
    date_str = current_date.strftime("%Y%m%d")
    
    total = sum(int(digit) for digit in date_str)
    totals.append(total)

    current_date += timedelta(days=1)

count_totals = Counter(totals)

# 出現回数と合計数のCSVファイル生成
with open('count_totals.csv', 'w', newline='') as file:
    writer = csv.writer(file)
    writer.writerow(['出現回数', '合計数'])
    for total, count in count_totals.items():
        writer.writerow([count, total])

# 西暦年月日と合計数のcsv生成
with open('date_totals.csv', 'w', newline='') as file:
    writer = csv.writer(file)
    writer.writerow(['西暦年月日', '合計数'])
    current_date = start_date
    for total in totals:
        date_str = current_date.strftime("%Y-%m-%d")
        writer.writerow([date_str, total])
        current_date += timedelta(days=1)            

あとは調べたい吉凶数から逆算して年月日を探す。西暦1年から2100年だと76万件(707009)もあるので、Excelでも重いので19000年~2023年とかで。