#format python """YootNoriSimulation """ import random class YootNori: pass class Mo(YootNori): def getUpCount(self): return 4 def getName(self): return "MO" def getPossibility(self): return 1 class Do(YootNori): def getUpCount(self): return 3 def getName(self): return "DO" def getPossibility(self): return 4 class Ge(YootNori): def getUpCount(self): return 2 def getName(self): return "GE" def getPossibility(self): return 6 class Gul(YootNori): def getUpCount(self): return 1 def getName(self): return "GUL" def getPossibility(self): return 4 class Yoot(YootNori): def getUpCount(self): return 0 def getName(self): return "YOOT" def getPossibility(self): return 1 mapOfUpCount = {4:Mo, 3:Do, 2:Ge, 1:Gul, 0:Yoot} mapOfYootName = {'MO':Mo, 'DO':Do, 'GE':Ge, 'GUL':Gul, 'YOOT':Yoot} class DoingYootNori: def __init__(self, aProbabilityUp): self.probUp = aProbabilityUp def throwOneYoot(self): rand = random.random() if rand > self.probUp: return 0 else : return 1 def throwFourYoot(self): yootlist = [] for i in range(4): yootlist.append(self.throwOneYoot()) return yootlist def judgeYoot(self, aYootList): upcount = aYootList.count(1) return mapOfUpCount[upcount]().getName() def throw(self): yootlist = self.throwFourYoot() return self.judgeYoot(yootlist) def getProbability(self, judge): theYoot = mapOfYootName[judge]() upProb = self.probUp downProb = 1-upProb upCount = theYoot.getUpCount() downCount = 4-upCount if upCount == 0: theProb = downProb**downCount elif downCount == 0: theProb = upProb**upCount else: theProb = (downProb**downCount) * (upProb**upCount) return theProb * theYoot.getPossibility() def __repr__(self): aString = '' for aYoot in mapOfYootName.keys(): aString += ( aYoot + "'s probability is " + str(self.getProbability(aYoot)) + '\n') return aString def returnMoAndGe(aProb): thisGame = DoingYootNori(aProb) probMo = thisGame.getProbability('MO') probGe = thisGame.getProbability('GE') return probMo, probGe def statEqualMoAndGe(aOneProb, aStep): probMo, probGe = returnMoAndGe(aOneProb) probDiff = probGe - probMo if probDiff < 0: return aOneProb else: newProb = aOneProb + aStep return statEqualMoAndGe(newProb, aStep) if __name__ == '__main__': myGame = DoingYootNori(0.71) theYoot = myGame.throw() print "You throw ", theYoot, '\n' print myGame print "The probability that equal Mo and Do is ", print statEqualMoAndGe(0.5, 0.001)