public class ThreeGatesExperiment {
private int N;
// 构造函数
public ThreeGatesExperiment(int N){
if(N <= 0)
throw new IllegalArgumentException("N must be larger than 0!");
this.N = N;
}
/**
* @param changeDoor 是否换门
*/
public void run(boolean changeDoor){
int wins = 0;
for(int i = 0 ; i < N ; i ++)
if(play(changeDoor))
wins ++;
System.out.println(changeDoor ? "Change" : "Not Change");
System.out.println("winning rate: " + (double)wins/N);
}
/**
* @param changeDoor 是否换门
*/
private boolean play(boolean changeDoor){
// double random=Math.random();//返回[0,1)随机数
// (int)(Math.random()*6)//返回0-5;随机数
// (int)(Math.random()*6+1)//返回1-6,随机骰子
// Door 0, 1, 2
int prizeDoor = (int)(Math.random() * 3);
int playerChoice = (int)(Math.random() * 3);
if( playerChoice == prizeDoor)
return changeDoor ? false : true;
else
return changeDoor ? true : false;
}
public static void main(String[] args) {
// 模拟100万次
int N = 10000000;
ThreeGatesExperiment exp = new ThreeGatesExperiment(N);
exp.run(true);
System.out.println();
exp.run(false);
}
}
Python实现
from random import random
class ThreeGatesExperiment():
def __init__(self, N):
assert N>=0, "N must be larger than 0!"
self.N = N;
def _play(self, changeDoor):
prizeDoor = (int)(random() * 3)
playerChoice = (int)(random() * 3)
if(playerChoice == prizeDoor):
return False if changeDoor else True;
else:
return True if changeDoor else False;
def run(self, changeDoor):
wins = 0
for i in range(N):
if self._play(changeDoor):
wins += 1
print("Change" if changeDoor else "Not Change")
print("winning rate: " , wins/N)
# 模拟100万次
N = 10000000
exp = ThreeGatesExperiment(N);
exp.run(True);
print()
exp.run(False);