I understand that it is impossible to โbreakโ the if statement and only from the loop, however, I try to conceptually stop the if statement from the evaluation after it finds the โtrueโ the first time it is inside the for loop.
# Import XML Parser import xml.etree.ElementTree as ET # Parse XML directly from the file path tree = ET.parse('xml file') # Create iterable item list items = tree.findall('item') # Create class for historic variables class DataPoint: def __init__(self, low, high, freq): self.low = low self.high = high self.freq = freq # Create Master Dictionary and variable list for historic variables masterDictionary = {} # Loop to assign variables as dictionary keys and associate their values with them for item in items: thisKey = item.find('variable').text thisList = [] masterDictionary[thisKey] = thisList for item in items: thisKey = item.find('variable').text newDataPoint = DataPoint(float(item.find('low').text), float(item.find('high').text), float(item.find('freq').text)) masterDictionary[thisKey].append(newDataPoint) diceDictionary = {} import random for thisKey in masterDictionary.keys(): randomValue = random.random() diceList = [] thisList = [] diceList = masterDictionary[thisKey] diceDictionary[thisKey] = thisList for i in range(len(diceList)): if randomValue <= sum(i.freq for i in diceList[0:i+1]): print 'O', i, 'randomValue', randomValue, 'prob container', sum(i.freq for i in diceList[0:i+1]) #diceRoll = random.uniform(diceList[i].low, diceList[i].high) #diceDictionary[thisKey].append(diceRoll) else: print 'X', i, 'randomValue', randomValue, 'prob container', sum(i.freq for i in diceList[0:i+1])
There are two keys in masterDictionary, each of which contains a list of 27 and 29 data points, respectively. Therefore loop
for i in range(len(diceList)):
I will run from 0 to 26 and 0-28 for each key. This is great, but the problem when calculating the if statement is that once it is found, it will subsequently be true for all of the following elements in the range. Here is the printout:
X 0 randomValue 0.0775612781213 prob container 0.0294117647059 X 1 randomValue 0.0775612781213 prob container 0.0294117647059 X 2 randomValue 0.0775612781213 prob container 0.0294117647059 X 3 randomValue 0.0775612781213 prob container 0.0294117647059 O 4 randomValue 0.0775612781213 prob container 0.147058823529 O 5 randomValue 0.0775612781213 prob container 0.235294117647 O 6 randomValue 0.0775612781213 prob container 0.441176470588 O 7 randomValue 0.0775612781213 prob container 0.588235294118 O 8 randomValue 0.0775612781213 prob container 0.676470588235 O 9 randomValue 0.0775612781213 prob container 0.764705882353 O 10 randomValue 0.0775612781213 prob container 0.794117647059 O 11 randomValue 0.0775612781213 prob container 0.823529411765 O 12 randomValue 0.0775612781213 prob container 0.823529411765 O 13 randomValue 0.0775612781213 prob container 0.852941176471 O 14 randomValue 0.0775612781213 prob container 0.882352941176 O 15 randomValue 0.0775612781213 prob container 0.882352941176 O 16 randomValue 0.0775612781213 prob container 0.911764705882 O 17 randomValue 0.0775612781213 prob container 0.911764705882 O 18 randomValue 0.0775612781213 prob container 0.911764705882 O 19 randomValue 0.0775612781213 prob container 0.911764705882 O 20 randomValue 0.0775612781213 prob container 0.911764705882 O 21 randomValue 0.0775612781213 prob container 0.941176470588 O 22 randomValue 0.0775612781213 prob container 0.941176470588 O 23 randomValue 0.0775612781213 prob container 0.970588235294 O 24 randomValue 0.0775612781213 prob container 0.970588235294 O 25 randomValue 0.0775612781213 prob container 0.970588235294 O 26 randomValue 0.0775612781213 prob container 0.970588235294 O 27 randomValue 0.0775612781213 prob container 0.970588235294 O 28 randomValue 0.0775612781213 prob container 1.0 X 0 randomValue 0.803308376497 prob container 0.0294117647059 X 1 randomValue 0.803308376497 prob container 0.0294117647059 X 2 randomValue 0.803308376497 prob container 0.0294117647059 X 3 randomValue 0.803308376497 prob container 0.0294117647059 X 4 randomValue 0.803308376497 prob container 0.0294117647059 X 5 randomValue 0.803308376497 prob container 0.0294117647059 X 6 randomValue 0.803308376497 prob container 0.0882352941176 X 7 randomValue 0.803308376497 prob container 0.0882352941176 X 8 randomValue 0.803308376497 prob container 0.0882352941176 X 9 randomValue 0.803308376497 prob container 0.117647058824 X 10 randomValue 0.803308376497 prob container 0.147058823529 X 11 randomValue 0.803308376497 prob container 0.205882352941 X 12 randomValue 0.803308376497 prob container 0.264705882353 X 13 randomValue 0.803308376497 prob container 0.294117647059 X 14 randomValue 0.803308376497 prob container 0.382352941176 X 15 randomValue 0.803308376497 prob container 0.441176470588 X 16 randomValue 0.803308376497 prob container 0.470588235294 X 17 randomValue 0.803308376497 prob container 0.470588235294 X 18 randomValue 0.803308376497 prob container 0.529411764706 X 19 randomValue 0.803308376497 prob container 0.588235294118 X 20 randomValue 0.803308376497 prob container 0.647058823529 X 21 randomValue 0.803308376497 prob container 0.764705882353 O 22 randomValue 0.803308376497 prob container 0.823529411765 O 23 randomValue 0.803308376497 prob container 0.882352941176 O 24 randomValue 0.803308376497 prob container 0.970588235294 O 25 randomValue 0.803308376497 prob container 0.970588235294 O 26 randomValue 0.803308376497 prob container 1.0
Anywhere, โXโ means that the if statement was false, and as soon as โOโ starts, the rest of the statements will always be true due to the increase in the size of the prob container (to 1.0).
What I'm looking for is a way of saying that the if statement inside the loop stops when it finds the first true statement, then writes to the dictionary, and then continues the outer loop again.
Any help appreciated!
UPDATE:
diceDictionary = {} x=0 while x < 3: import random for thisKey in masterDictionary.keys(): randomValue = random.random() diceList = [] thisList = [] diceList = masterDictionary[thisKey] diceDictionary[thisKey] = thisList for i in range(len(diceList)): if randomValue <= sum(i.freq for i in diceList[0:i+1]): print 'O', thisKey, i, 'randomValue', randomValue, 'prob container', sum(i.freq for i in diceList[0:i+1]) diceRoll = random.uniform(diceList[i].low, diceList[i].high) diceDictionary[thisKey].append(diceRoll) break else: print 'X', thisKey, i, 'randomValue', randomValue, 'prob container', sum(i.freq for i in diceList[0:i+1]) x = x + 1 print diceDictionary
gives:
X inflation 0 randomValue 0.500605733928 prob container 0.0294117647059 X inflation 1 randomValue 0.500605733928 prob container 0.0294117647059 X inflation 2 randomValue 0.500605733928 prob container 0.0294117647059 X inflation 3 randomValue 0.500605733928 prob container 0.0294117647059 X inflation 4 randomValue 0.500605733928 prob container 0.147058823529 X inflation 5 randomValue 0.500605733928 prob container 0.235294117647 X inflation 6 randomValue 0.500605733928 prob container 0.441176470588 O inflation 7 randomValue 0.500605733928 prob container 0.588235294118 X stock 0 randomValue 0.392225720409 prob container 0.0294117647059 X stock 1 randomValue 0.392225720409 prob container 0.0294117647059 X stock 2 randomValue 0.392225720409 prob container 0.0294117647059 X stock 3 randomValue 0.392225720409 prob container 0.0294117647059 X stock 4 randomValue 0.392225720409 prob container 0.0294117647059 X stock 5 randomValue 0.392225720409 prob container 0.0294117647059 X stock 6 randomValue 0.392225720409 prob container 0.0882352941176 X stock 7 randomValue 0.392225720409 prob container 0.0882352941176 X stock 8 randomValue 0.392225720409 prob container 0.0882352941176 X stock 9 randomValue 0.392225720409 prob container 0.117647058824 X stock 10 randomValue 0.392225720409 prob container 0.147058823529 X stock 11 randomValue 0.392225720409 prob container 0.205882352941 X stock 12 randomValue 0.392225720409 prob container 0.264705882353 X stock 13 randomValue 0.392225720409 prob container 0.294117647059 X stock 14 randomValue 0.392225720409 prob container 0.382352941176 O stock 15 randomValue 0.392225720409 prob container 0.441176470588 X inflation 0 randomValue 0.146182475695 prob container 0.0294117647059 X inflation 1 randomValue 0.146182475695 prob container 0.0294117647059 X inflation 2 randomValue 0.146182475695 prob container 0.0294117647059 X inflation 3 randomValue 0.146182475695 prob container 0.0294117647059 O inflation 4 randomValue 0.146182475695 prob container 0.147058823529 X stock 0 randomValue 0.745100497977 prob container 0.0294117647059 X stock 1 randomValue 0.745100497977 prob container 0.0294117647059 X stock 2 randomValue 0.745100497977 prob container 0.0294117647059 X stock 3 randomValue 0.745100497977 prob container 0.0294117647059 X stock 4 randomValue 0.745100497977 prob container 0.0294117647059 X stock 5 randomValue 0.745100497977 prob container 0.0294117647059 X stock 6 randomValue 0.745100497977 prob container 0.0882352941176 X stock 7 randomValue 0.745100497977 prob container 0.0882352941176 X stock 8 randomValue 0.745100497977 prob container 0.0882352941176 X stock 9 randomValue 0.745100497977 prob container 0.117647058824 X stock 10 randomValue 0.745100497977 prob container 0.147058823529 X stock 11 randomValue 0.745100497977 prob container 0.205882352941 X stock 12 randomValue 0.745100497977 prob container 0.264705882353 X stock 13 randomValue 0.745100497977 prob container 0.294117647059 X stock 14 randomValue 0.745100497977 prob container 0.382352941176 X stock 15 randomValue 0.745100497977 prob container 0.441176470588 X stock 16 randomValue 0.745100497977 prob container 0.470588235294 X stock 17 randomValue 0.745100497977 prob container 0.470588235294 X stock 18 randomValue 0.745100497977 prob container 0.529411764706 X stock 19 randomValue 0.745100497977 prob container 0.588235294118 X stock 20 randomValue 0.745100497977 prob container 0.647058823529 O stock 21 randomValue 0.745100497977 prob container 0.764705882353 X inflation 0 randomValue 0.332170052306 prob container 0.0294117647059 X inflation 1 randomValue 0.332170052306 prob container 0.0294117647059 X inflation 2 randomValue 0.332170052306 prob container 0.0294117647059 X inflation 3 randomValue 0.332170052306 prob container 0.0294117647059 X inflation 4 randomValue 0.332170052306 prob container 0.147058823529 X inflation 5 randomValue 0.332170052306 prob container 0.235294117647 O inflation 6 randomValue 0.332170052306 prob container 0.441176470588 X stock 0 randomValue 0.145551106438 prob container 0.0294117647059 X stock 1 randomValue 0.145551106438 prob container 0.0294117647059 X stock 2 randomValue 0.145551106438 prob container 0.0294117647059 X stock 3 randomValue 0.145551106438 prob container 0.0294117647059 X stock 4 randomValue 0.145551106438 prob container 0.0294117647059 X stock 5 randomValue 0.145551106438 prob container 0.0294117647059 X stock 6 randomValue 0.145551106438 prob container 0.0882352941176 X stock 7 randomValue 0.145551106438 prob container 0.0882352941176 X stock 8 randomValue 0.145551106438 prob container 0.0882352941176 X stock 9 randomValue 0.145551106438 prob container 0.117647058824 O stock 10 randomValue 0.145551106438 prob container 0.147058823529 {'inflation': [0.028073642645577577], 'stock': [-0.07388514885974767]}