2013-03-03 40 views
0

我正在爲一個大型項目編寫隨機代數方程生成器的代碼片段。到目前爲止,一切都運轉良好。主要問題很簡單。我按順序組合了字典的內容。所以爲了辯論的緣故,比如說字典是:exdict = {a:1 , b:2 , c:3 , d:4},我把它們附加到列表中:exlist = [a, b, c, d, 1, 2, 3, 4]。我的列表長度是8,其中的一半明顯是4.算法非常簡單,無論在1-4之間生成隨機數(或者python稱爲0-3索引),如果添加一半長度將該列表與該索引值相比較,您將擁有正確的值。Python'for'循環問題,這兩個變量是不是在我的'for'循環中正確添加到一起?

我已經做了研究網上和計算器,但無法找到,我可以適用於我的情況任何回答...

下面是我的代碼的錯誤檢查版本。它會在每個變量發生時打印出來。我遇到的問題是在底部,在### ITERATIONS & SETUP評論下。其餘的代碼在那裏,所以它可以正常運行。主要問題是a + x應該是m,但+ x從不等於m,m總是悲慘地較低。

錯誤校驗碼:

from random import randint as ri 
from random import shuffle as sh 


#def randomassortment(): 
letterss = ['a','b','x','d','x','f','u','h','i','x','k','l','m','z','y','x'] 
rndmletters = letterss[ri(1,15)] 
global newdict 
newdict = {} 
numberss = [] 
for x in range(1,20): 

    #range defines max number in equation 
    numberss.append(ri(1,20)) 

for x in range(1,20): 
    rndmnumber = numberss[ri(1,18)] 
    rndmletters = letterss[ri(1,15)] 
    newdict[rndmletters] = rndmnumber 
#x = randomassortment() 
#print x[] 


z = [] 
# set variable letter : values in list 
for a in newdict.keys(): 
    z.append(a) 
for b in newdict.values(): 
    z.append(b) 

x = len(z)/2 
test = len(z) 


print 'x is value %d' % (x) 


### ITERATIONS & SETUP 

iteration = ri(2,6) 


for x in range(1,iteration): 
    a = ri(1,x) 
    m = a + x 
    print 'a is value: %d' % (a) 
    print 'm is value %d' %(m) 
    print 
    variableletter = z[a] 
    variablevalue = z[m] 
    # variableletter , variablevalue 

編輯 - 我的問題最終是,爲什麼a + x返回的值是不是一個+ X。如果您運行此代碼,它將打印x,a和m。 m應該是a + x的值,但由於某種原因,它不是?

+0

你的問題還不清楚取代所有的代碼在for循環。你期望這個代碼的輸出是什麼? – 2013-03-03 01:47:43

+0

編輯了問題並清理了代碼 – 01110100 2013-03-03 01:53:38

回答

3

像您期望的,這是不工作的原因是,您的變量x原意列表的長度,但它在for x in range循環中被替換 - 然後您希望它等於列表的長度。您可以將線路更改爲

for i in range(iteration) 

改爲。

另外請注意,您可以用

variableletter, variablevalue = random.choice(newdict.items()) 
0

你的問題是範圍

你這裏尋找其中x

x = len(z)/2 # This is the first x 
print 'x is value %d' % (x) 


### ITERATIONS & SETUP 

iteration = ri(2,6) 

# x in the for loop is referencing the x in range... 
for x in range(1,iteration): 
    a = ri(1,x) 
    m = a + x