Python'for'循环问题,这两个变量在我的'for'循环中没有正确地加在一起是什么?

时间:2013-03-03 01:44:24

标签: python for-loop

我正在为一个更大的项目编写一个随机代数方程生成器的代码片段。到目前为止,一切都运作良好。主要问题很简单。我按顺序组合了字典的内容。因此,为了论证,请说字典是: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索引),如果你加上一半的长度对于该索引值的列表,您将具有正确的值。

我已经在线进行了研究并在stackoverflow上进行了研究,但找不到任何可以应用于我的情况的答案......

以下是我的代码的错误检查版本。它会在发生时打印出每个变量。根据{{​​1}}评论,我遇到的问题是最底层的问题。剩下的代码就在那里,所以它可以正常运行。主要问题是a + x应该是m,但是+ x永远不等于m,m总是悲惨地降低。

错误检查代码:

### ITERATIONS & SETUP

编辑 - 我的问题最终是,为什么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 返回的值不是+ x。如果运行此代码,它将打印x,a和m。 m应该是a + x的值,但由于某种原因,它不是吗?

2 个答案:

答案 0 :(得分:3)

这不符合预期的原因是您的变量x最初表示列表的长度,但它已在for x in range循环中替换 - 然后您希望它相等到列表的长度。您可以将行更改为

for i in range(iteration)

代替。

另请注意,您可以使用

替换for循环中的所有代码
variableletter, variablevalue = random.choice(newdict.items())

答案 1 :(得分: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