Unentbehrlich für Schlafwandler: Mondphasen berechnen
Wer für das eigene Schlafwandeln oder das seiner Mitbewohner, für wirksames Kräuterpflücken oder seine Nebenbeschäftigung als Werwolf seine Zeitplanung an den Mondphasen orientieren (oder vielleicht einen eigenen Kalender layouten) will, braucht eine gute Berechnungsgrundlage.
Hier ist ein Codeschnipsel (nach einer Doku):
from datetime import datetime as dt
from decimal import Decimal
from math import floor
# Calculate lunar phase by Sean B. Palmer, inamidst.com
# http://en.wikipedia.org/wiki/Lunar_phase#Lunar_phase_calculation
phases = ["🌑", "🌒", "🌓", "🌔", "🌕", "🌖", "🌗", "🌘"]
def position(then: dt) -> Decimal:
diff = then - dt(2001, 1, 1)
days = Decimal(diff.days) + Decimal(diff.seconds) / Decimal(86400)
lunations = Decimal('0.20439731') + days * Decimal('0.03386319269')
return lunations % Decimal(1)
def phase(pos: Decimal) -> str:
index = pos * Decimal(8) + Decimal('0.5')
index = int(floor(index)) & 7
return phases[index]
Aufrufbeispiel:
>>> import mond >>> tag = mond.dt(2024, 1, 1) >>> print(mond.phase(mond.position(tag)) '🌖'