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 索引),如果你添加一半的长度到该索引值的列表中,您将获得正确的值。

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

以下是我的代码的错误检查版本。它会在发生时打印出每个变量。我遇到的问题是在### ITERATIONS & SETUP评论下。其余代码都在那里,因此可以正常运行。主要问题是 a + x 应该是 m,但 a + 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 的值,但出于某种原因,不是吗?

4

2 回答 2

3

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

for i in range(iteration)

反而。

另请注意,您可以将 for 循环中的所有代码替换为

variableletter, variablevalue = random.choice(newdict.items())
于 2013-03-03T01:51:23.753 回答
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
于 2013-03-03T01:51:03.253 回答