convert an unfair coin into a fair coin in Python 2.7

252 Views Asked by At

Using Python 2.7. Suppose I have an unfair coin and I want to turn it into a fair coin using the following way,

  1. Probability of generating head is equal for unfair coin;
  2. Flip unfair coin and only accept head;
  3. When a head is appearing, treat it as 1 (head for virtual fair coin), when another head is appearing, treat it as 0 (tail for virtual fair coin), next time when head appears, treat it as 1, next time treat as 0, ..., and so on.

Not sure if this method works? Actually I am not quite confident about the method above and also how to use equalCoinHelper() correctly (I mark my question in my code).

If anyone have any good ideas, it will be great.

from __future__ import print_function
import random
counter = 0

# 0.3 probability return head as 1
# 0.7 probability return tail as 0
def unFairCoin():
   if random.random() < 0.3:
       return 1
   else:
       return 0

# probability of generating 1 is equal, so keep 1 only
def equalCoinHelper():
    result = 0
    while result == 0:
        result = unFairCoin()

def equalDistribution():
    global counter
    # not think about how to leverage this better
    equalCoinHelper()
    counter += 1
    if counter % 2 == 0:
        return 1
    else:
        return 0

if __name__ == "__main__":
    # generate 10 random 0/1 with equal probability
    print ([equalDistribution() for _ in range(10)])
1

There are 1 best solutions below

1
On

You are just producing a deterministic sequence.

Try the following approach instead:

When you get $HH$ or $TT$, reject it.

When you get $HT$, treat it as head.

When you get $TH$ treat it as tail.