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は+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 に答える