🛠️ToolsShed

Calculateur de Cycles de Sommeil

Trouvez le meilleur horaire pour dormir ou se réveiller basé sur des cycles de sommeil de 90 minutes.

La calculatrice de cycles de sommeil vous aide à planifier votre heure de coucher ou de réveil pour vous aligner avec les cycles naturels de sommeil de 90 minutes de votre corps. Pendant le sommeil, le cerveau passe par des étapes incluant le sommeil léger, le sommeil profond à ondes lentes et le sommeil REM.

Entrez l'heure à laquelle vous voulez vous réveiller ou l'heure à laquelle vous prévoyez de vous endormir. L'outil calcule les heures de coucher ou de réveil qui tombent à la fin d'un cycle de sommeil complet, en tenant compte des 15 minutes moyennes qu'il faut pour s'endormir.

La plupart des adultes ont besoin de 7 à 9 heures de sommeil, soit 5 à 6 cycles complets. Si vous vous réveillez régulièrement fatigué malgré une durée de sommeil recommandée, le problème peut être le moment — vous vous réveillez au milieu d'une phase de sommeil profond.

Questions Fréquentes

Implémentation du Code

from datetime import datetime, timedelta

CYCLE_MINUTES = 90         # average sleep cycle length
SLEEP_LATENCY_MINUTES = 15 # average time to fall asleep

def wake_times(bedtime_str, num_cycles=6, latency_minutes=SLEEP_LATENCY_MINUTES):
    """
    Given a bedtime string ("HH:MM"), return suggested wake times
    for 3 to num_cycles complete sleep cycles.
    """
    bedtime = datetime.strptime(bedtime_str, "%H:%M")
    results = []
    for cycles in range(3, num_cycles + 1):
        sleep_duration = timedelta(
            minutes=latency_minutes + cycles * CYCLE_MINUTES
        )
        wake = bedtime + sleep_duration
        results.append({
            "cycles": cycles,
            "sleep_hours": round((cycles * CYCLE_MINUTES) / 60, 1),
            "wake_time": wake.strftime("%H:%M"),
        })
    return results


def bedtime_for_wake(wake_time_str, num_cycles=6, latency_minutes=SLEEP_LATENCY_MINUTES):
    """
    Given a target wake time, suggest when to go to bed for
    3 to num_cycles complete sleep cycles.
    """
    wake = datetime.strptime(wake_time_str, "%H:%M")
    results = []
    for cycles in range(3, num_cycles + 1):
        sleep_duration = timedelta(
            minutes=latency_minutes + cycles * CYCLE_MINUTES
        )
        bedtime = wake - sleep_duration
        results.append({
            "cycles": cycles,
            "sleep_hours": round((cycles * CYCLE_MINUTES) / 60, 1),
            "bedtime": bedtime.strftime("%H:%M"),
        })
    return results


# Example 1: bedtime → wake times
print("If you go to bed at 23:00, wake up at:")
for w in wake_times("23:00"):
    print(f"  {w['cycles']} cycles ({w['sleep_hours']}h) → wake at {w['wake_time']}")

# Example 2: target wake time → bedtimes
print("\nTo wake up at 07:00, go to bed at:")
for b in bedtime_for_wake("07:00"):
    print(f"  {b['cycles']} cycles ({b['sleep_hours']}h) → bed at {b['bedtime']}")

Comments & Feedback

Comments are powered by Giscus. Sign in with GitHub to leave a comment.