Spring til indhold
12+ år Øvet ⏱ 30-45 minutter

Simulér fødselsdagsparadokset med Python

Hvor mange skal I være i klassen, før det er sandsynligt, at to har fødselsdag samme dag? Gæt først – og lad så Python lave 10.000 klasser og finde svaret.

Illustration af en kalender og en billet

Hvor mange elever skal der være i en klasse, før der er over 50 % chance for, at to af dem har fødselsdag på samme dag? Skriv dit gæt ned, før du læser videre. De fleste gætter alt for højt – derfor kaldes det et paradoks.

I stedet for at regne svaret ud laver du et eksperiment inde i computeren: Python finder på tusindvis af klasser med tilfældige fødselsdage og tæller, hvor tit to elever deler dag. Sådan et eksperiment i computeren kaldes en simulation.

Sådan gør du

  1. Åbn en Python-editor, fx Thonny (gratis) eller IDLE, der følger med Python fra python.org.
  2. Kopiér programmet nedenfor ind, og kør det. Det går hurtigt, selvom computeren laver 120.000 klasser.
  3. Kig på tabellen. Hvor mange elever skal der til, før chancen er over 50 %? Passer det med dit gæt?
  4. Kør programmet igen. Tallene ændrer sig lidt hver gang, fordi fødselsdagene er tilfældige. Men mønstret er det samme.
  5. Tjek resultatet med matematik: det lille program under “Regn det præcist” giver det nøjagtige svar for 23 elever.
  6. Prøv det i virkeligheden: skriv fødselsdagene (kun dag og måned) i din klasse eller familie op, og se, om to deler dag.

Eksempel (Python)

import random

def samme_foedselsdag(antal_elever):
    """Lav en klasse med tilfældige fødselsdage. Har to elever samme dag?"""
    dage = set()
    for _ in range(antal_elever):
        dag = random.randint(1, 365)   # dag 1 er 1. januar, dag 365 er 31. december
        if dag in dage:
            return True
        dage.add(dag)
    return False

def eksperiment(antal_elever, antal_klasser=10000):
    """Prøv med mange klasser, og regn ud, hvor tit det sker (i procent)."""
    gange = 0
    for _ in range(antal_klasser):
        if samme_foedselsdag(antal_elever):
            gange += 1
    return gange / antal_klasser * 100

print("Elever   Chance for to med samme fødselsdag")
for antal in range(5, 61, 5):
    procent = eksperiment(antal)
    soejle = "█" * round(procent / 2)
    print(f"{antal:>6}   {procent:5.1f} %  {soejle}")

random.randint(1, 365) vælger en tilfældig dag i året. dage er et set – en samling, der husker hver dag én gang og hurtigt kan svare på, om en dag allerede er der. Funktionen eksperiment gentager det hele 10.000 gange og regner ud, hvor mange procent af klasserne der havde to med samme fødselsdag.

Regn det præcist

Man kan også regne svaret ud. Chancen for, at alle har hver sin fødselsdag, bliver lidt mindre for hver ny elev. Resten er chancen for, at mindst to deler dag.

antal_elever = 23

# Chancen for, at ALLE har hver sin fødselsdag:
alle_forskellige = 1
for i in range(antal_elever):
    alle_forskellige = alle_forskellige * (365 - i) / 365

# Så er chancen for, at mindst to deler dag, resten:
print(f"{antal_elever} elever: {(1 - alle_forskellige) * 100:.1f} %")

Svaret er 50,7 %. Allerede ved 23 elever er det altså mere sandsynligt end ikke, at to har fødselsdag samme dag. Ligger din simulation tæt på?

💡 Modellen snyder lidt: den glemmer 29. februar og lader, som om alle dage er lige almindelige. Alle simulationer forenkler virkeligheden – det vigtige er at vide hvordan.

Kan du lide at simulere? Prøv også raket-simulatoren i Scratch, hvor du selv programmerer tyngdekraften.

🧠 Udfordring – prøv selv

Hvor mange skal I være, før chancen er over 99 %? Ændr range(5, 61, 5), så programmet tester hvert eneste antal fra 50 til 70. Tjek bagefter dit svar med det præcise program.