Can someone explain the Boy Girl Paradox to me?

1.09K views

It’s so counter-intuitive my head is going to explode.

Here’s the paradox for the uninitiated:If I say, “I have 2 kids, at least one of which is a girl.” What is the probability that my other kid is a girl? The answer is 33.33%.

>*Intuitively, most of us would think the answer is 50%. But it isn’t. I implore you to read more about the problem.*

Then, if I say, “I have 2 kids, at least one of which is a girl, whose name is Julie.” What is the probability that my other kid is a girl? The answer is 50%.

>*The bewildering thing is the elephant in the room. Obviously. How does giving her a name change the probability?*
>
>*Apparently, if I said, “I have 2 kids, at least one of which is a girl, whose name is …” The probability that the other kid is a girl* ***IS STILL 33.33%.*** *Until the name is uttered, the probability remains 33.33%. Mind-boggling.*

And now, if I say, “I have 2 kids, at least one of which is a girl, who was born on Tuesday.” What is the probability that my other kid is a girl? The answer is 13/27.

>*I give up.*

Can someone explain this brain-melting paradox to me, please?

In: 4

26 Answers

Anonymous 0 Comments

Okay, so maybe this isn’t “Like I’m 5” buuuuuut I wrote a python script to convince myself of this, in particular the part about the names. It made sense to me when I defined and ordered the filter functions. Also, could not think of female names that started with some letters…
“`
import random

random.seed()

GENDERS = [“Boy”, “Girl”]
BOY_NAMES = [“John”, “Paul”, “George”, “Ringo”]
GIRL_NAMES = [“Beyonce”, “Kelly”, “Michelle”, “LaTavia”, “LeToya”, “Farrah”, “Alice”, “Betty”, “Catherine”
, “Doris”, “Ethel”, “Francis”, “Gretchen”, “Helen”, “Izzy”, “Janice”, “Karen”, “Lauren”, “Maureen”
, “Nancy”, “Ophelia”, “Patty”, “Quigly”, “Regina”, “Stacy”, “Terry”, “Ultrabiglady”, “Vera”
, “Wendy”, “Xavia”, “Yoonis”, “Zazzy”]

class Child:
def __init__(self):
self.gender = random.choice(GENDERS)

names = GIRL_NAMES if self.gender == “Girl” else BOY_NAMES
self.name = random.choice(names)

def print(self):
print(self.name, f”({self.gender})”)

class ChildPair:
def __init__(self):
self.first = Child()
self.second = Child()

#filter functions
hasOneGirl = lambda x : x.first.gender == “Girl” or x.second.gender == “Girl”
hasTwoGirls = lambda x : x.first.gender == “Girl” and x.second.gender == “Girl”
hasBeyonce = lambda x : x.first.name == “Beyonce” or x.second.name == “Beyonce”

pairs = [ChildPair() for i in range(0, 100000)]

oneGirl = list(filter(hasOneGirl, pairs))
twoGirls = list(filter(hasTwoGirls, pairs))
oneGirlAndBeyonce = list(filter(hasBeyonce, oneGirl))
twoGirlsAndBeyonce = list(filter(hasBeyonce, twoGirls))

print(“Families with one girl”, len(oneGirl))
print(“Families with two girls”, len(twoGirls))
print(“Odds second child is girl: “, “%.3f” % (len(twoGirls) * 100.0 / len(oneGirl)))

print(“Families with at least one girl named beyonce”, len(oneGirlAndBeyonce))
print(“Families with two girls and one is named beyonce”, len(twoGirlsAndBeyonce))
print(“Odds second child is girl: “, “%.3f” % (len(twoGirlsAndBeyonce) * 100.0 / len(oneGirlAndBeyonce)))
“`

Results:
“`
Families with one girl 74828
Families with two girls 25100
Odds second child is girl: 33.544
Families with at least one girl named beyonce 3092
Families with two girls and one is named beyonce 1567
Odds second child is girl: 50.679
“`

You are viewing 1 out of 26 answers, click here to view all answers.