dice = {'red': [{'surge':0,'hit':1,'range':0}, \ {'surge':0,'hit':2,'range':0}, \ {'surge':0,'hit':3,'range':0}, \ {'surge':0,'hit':3,'range':0}, \ {'surge':0,'hit':2,'range':0}, \ {'surge':1,'hit':2,'range':0}],\ \ 'green': [{'surge':1,'hit':0,'range':1}, \ {'surge':1,'hit':1,'range':1}, \ {'surge':0,'hit':2,'range':1}, \ {'surge':0,'hit':2,'range':3}, \ {'surge':1,'hit':1,'range':2}, \ {'surge':0,'hit':2,'range':2}],\ \ 'yellow':[{'surge':1,'hit':0,'range':0}, \ {'surge':0,'hit':1,'range':2}, \ {'surge':1,'hit':1,'range':1}, \ {'surge':0,'hit':2,'range':1}, \ {'surge':2,'hit':1,'range':0}, \ {'surge':1,'hit':0,'range':2}],\ \ 'blue': [{'surge':0,'hit':1,'range':2}, \ {'surge':1,'hit':0,'range':2}, \ {'surge':0,'hit':2,'range':3}, \ {'surge':0,'hit':2,'range':4}, \ {'surge':1,'hit':1,'range':3}, \ {'surge':0,'hit':1,'range':5}],\ \ 'white': [{'surge':0,'hit':0,'range':0}, \ {'surge':0,'hit':-1,'range':0}, \ {'surge':-1,'hit':-1,'range':0}, \ {'surge':0,'hit':-100,'range':-100}, \ {'surge':-1,'hit':0,'range':0}, \ {'surge':-1,'hit':-1,'range':0}],\ \ 'black': [{'surge':-1,'hit':0,'range':0}, \ {'surge':0,'hit':-1,'range':0}, \ {'surge':0,'hit':-2,'range':0}, \ {'surge':0,'hit':-3,'range':0}, \ {'surge':0,'hit':-2,'range':0}, \ {'surge':0,'hit':-1,'range':0}]} #print(dice) def printTable(numResults, resultArray): surgeHeader = " " for l in range(len(resultArray[0][0])): surgeHeader += '{:>7}'.format(l) for i in range(len(resultArray)): print("Range: ",i); print(surgeHeader) for j in range(len(resultArray[i])): outString = str(j)+": " for k in range(len(resultArray[i][j])): if (resultArray[i][j][k] == 0): outString += " -- " else: outString += '{:>6.1%} '.format(float(resultArray[i][j][k])/numResults) print (outString) def generateCDF(resultArray): # Collapse ranges for i in range(len(resultArray)-1): for j in range(len(resultArray[i])): for k in range(len(resultArray[i][j])): resultArray[len(resultArray)-i-2][j][k] += resultArray[len(resultArray)-i-1][j][k] # Collapse hits for i in range(len(resultArray)): for j in range(len(resultArray[i])-1): for k in range(len(resultArray[i][j])): resultArray[i][len(resultArray[i])-j-2][k] += resultArray[i][len(resultArray[i])-j-1][k] # Collapse surges for i in range(len(resultArray)): for j in range(len(resultArray[i])): for k in range(len(resultArray[i][j])-1): resultArray[i][j][len(resultArray[i][j])-k-2] += resultArray[i][j][len(resultArray[i][j])-k-1] return resultArray def calculateResults2(dieList): max_hit = 0 max_range = 0 max_surge=0 for die in dieList: top_hit = 0 top_range = 0 top_surge = 0 if die not in dice: print ("Error die not found: ",die) else: for side in dice[die]: top_hit = side['hit'] if side['hit'] > top_hit else top_hit top_range = side['range'] if side['range'] > top_range else top_range top_surge = side['surge'] if side['surge'] > top_surge else top_surge max_hit += top_hit max_range += top_range max_surge += top_surge #generate Result Array resultArray = [] for i in range(max_range+1): resultArray.append([]) for j in range(max_hit+1): resultArray[i].append([]) for k in range(max_surge+1): resultArray[i][j].append(0) #initialize first cell of array resultArray[0][0][0] = 1 for die in dieList: # Generate temp array tempArray = [] for i in range(max_range+1): tempArray.append([]) for j in range(max_hit+1): tempArray[i].append([]) for k in range(max_surge+1): tempArray[i][j].append(0) if die not in dice: break else: for side in dice[die]: for i in range(len(resultArray)): for j in range(len(resultArray[i])): for k in range(len(resultArray[i][j])): if resultArray[i][j][k] != 0: tempRange = i + side['range'] tempHit = j + side['hit'] tempSurge = k + side['surge'] if (tempRange < 0): tempRange = 0 if (tempHit < 0): tempHit = 0 if (tempSurge < 0): tempSurge = 0 #Assign new values tempArray[tempRange][tempHit][tempSurge] += resultArray[i][j][k] resultArray = tempArray numEntries = 0 for i in range(len(resultArray)): for j in range(len(resultArray[i])): for k in range(len(resultArray[i][j])): numEntries += resultArray[i][j][k] return numEntries, resultArray #print (resultList) #print len(resultList) while(1): diceIn = "" diceIn = raw_input("Select dice (b)lue (y)ellow (g)reen (r)ed (w)hite b(l)ack (q)uit: ") dieList = [] for i in range(len(diceIn)): letter = diceIn[i] if letter == 'b': dieList.append("blue") elif letter == 'y': dieList.append("yellow") elif letter == 'g': dieList.append("green") elif letter == 'r': dieList.append("red") elif letter == 'w': dieList.append("white") elif letter == 'l': dieList.append("black") elif letter == ' ': None elif letter == 'q': exit() else: print("Please input only single letters as listed in parentheses above.") break #numResults, resultArray = calculateResults(dieList) numResults, resultArray = calculateResults2(dieList) print("PDF:") printTable(numResults,resultArray) cdfArray = generateCDF(resultArray) print("CDF:") printTable(numResults,cdfArray)
Run
Reset
Share
Import
Link
Embed
Language▼
English
中文
Python Fiddle
Python Cloud IDE
Follow @python_fiddle
Browser Version Not Supported
Due to Python Fiddle's reliance on advanced JavaScript techniques, older browsers might have problems running it correctly. Please download the latest version of your favourite browser.
Chrome 10+
Firefox 4+
Safari 5+
IE 10+
Let me try anyway!
url:
Go
Python Snippet
Stackoverflow Question