私は、リストを与えるようになる一連の関数を持っています。最初の項目には辞書を派生させた番号があり、2番目と3番目の項目は辞書です。ランダムに生成された辞書をPythonに格納する
これらの辞書は、以前にランダムに生成されています。
私が使用している関数は、指定された数のこれらの辞書を生成し、最も高い数値を最初の項目として取得しようとします。 (ダイスロールを最適化するように設計されています)。
これはすべて正常に動作し、すべての繰り返しの中で最も高い最初のアイテムの値を印刷できます。しかし、この最初の数字に関連付けられている2つの辞書を試してみると(リストにまとめられていることを念頭に置いてください)、他の2つの辞書が無作為に生成されているように見えます。
def repeat(type, times):
best = 0
for i in range(0, times):
x = rollForCharacter(type)
if x[0] > best:
print("BEST:", x)
best = x[0]
print("The highest average success is", best)
return best
これは素晴らしいです。
BEST: (3.58, [{'strength': 4, 'intelligence': 1, 'charisma': 1, 'stamina': 4, 'willpower': 2, 'dexterity': 2, 'wits': 5, 'luck': 2}, {'agility': 1, 'brawl': 2, 'investigation': 3, 'larceny': 0, 'melee': 1, 'survival': 0, 'alchemy': 3, 'archery': 0, 'crafting': 0, 'drive': 1, 'magic': 0, 'medicine': 0, 'commercial': 0, 'esteem': 5, 'instruction': 2, 'intimidation': 2, 'persuasion': 0, 'seduction': 0}]) The highest average success is 3.58
しかし、私はこの番号を与えたリストを格納するために何かをしようとした場合::示した最後の事はある
:def repeat(type, times):
best = 0
bestChar = []
for i in range(0, times):
x = rollForCharacter(type)
if x[0] > best:
print("BEST:", x)
best = x[0]
bestChar = x
print("The highest average success is", best)
print("Therefore the best character is", bestChar)
return best, bestChar
を私は結構です、最後の結果として、これを取得します
BEST: (4.15, [{'strength': 2, 'intelligence': 3, 'charisma': 4, 'stamina': 4, 'willpower': 1, 'dexterity': 2, 'wits': 4, 'luck': 1}, {'agility': 1, 'brawl': 0, 'investigation': 5, 'larceny': 0, 'melee': 0, 'survival': 0, 'alchemy': 7, 'archery': 0, 'crafting': 0, 'drive': 0, 'magic': 0, 'medicine': 0, 'commercial': 1, 'esteem': 0, 'instruction': 3, 'intimidation': 0, 'persuasion': 0, 'seduction': 0}]) The highest average success is 4.15
が、最後の行は
ですTherefore the best character is (4.15, [{'strength': 1, 'intelligence': 3, 'charisma': 4, 'stamina': 4, 'willpower': 1, 'dexterity': 2, 'wits': 2, 'luck': 3}, {'agility': 1, 'brawl': 0, 'investigation': 1, 'larceny': 4, 'melee': 2, 'survival': 0, 'alchemy': 2, 'archery': 4, 'crafting': 0, 'drive': 0, 'magic': 0, 'medicine': 0, 'commercial': 1, 'esteem': 0, 'instruction': 0, 'intimidation': 2, 'persuasion': 1, 'seduction': 0}])
ご覧のとおり、これは私が望むものと一致せず、文字通りその上に何が表示されていますか。
ちょっと調べてみると、 "ベストキャラクター"が最後に生成されたものであることがわかりました。これは最高ではなく、最近のものです。しかし、最初の要素が記録された最高の結果であり、リストの残りの文字からではないため、単純ではありません。これは、リストがどうにか編集されていることを意味するので、実際には混乱しますが、どこでそれが起こるのか分かりません。
いつもランダムに生成される何か愚かなことをしていますか?私はx[0]
が正しい結果を与えて、それが全体のリストであるときに何が変わるのでうまく保存されていると思いますか?
rollForCharacter()関数からは、数字だけのrollResult, character
が返され、次に2つの辞書が返されます。
誰かが私が間違っている場所を説明し、コンソールに正しい答えを印刷することができますが、なぜそれが正しい行を下に保存しないのかを説明できると大変感謝します!
EDIT:
辞書1つのコード:
attributes = {}
def assignRow(row, p): # p is the number of points you have to assign to each row
rowValues = {}
for i in range(0, len(row)-1):
val = randint(0, p)
rowValues[row[i]] = val + 1
p -= val
rowValues[row[-1]] = p + 1
return attributes.update(rowValues)
def getPoints():
points = [7, 5, 3]
shuffle(points)
row1 = ['strength', 'intelligence', 'charisma']
row2 = ['stamina', 'willpower']
row3 = ['dexterity', 'wits', 'luck']
for i in range(0, len(points)):
row = eval("row" + str(i+1))
assignRow(row, points[i])
辞書2コード:
skills = {}
def assignRow(row, p): # p is the number of points you have to assign to each row
rowValues = {}
for i in range(0, len(row) - 1):
val = randint(0, p)
rowValues[row[i]] = val
p -= val
rowValues[row[-1]] = p
return skills.update(rowValues)
def getPoints():
points = [11, 7, 4]
shuffle(points)
row1 = ['agility', 'brawl', 'investigation', 'larceny', 'melee', 'survival']
row2 = ['alchemy', 'archery', 'crafting', 'drive', 'magic', 'medicine']
row3 = ['commercial', 'esteem', 'instruction', 'intimidation', 'persuasion', 'seduction']
for i in range(0, len(points)):
row = eval("row" + str(i + 1))
assignRow(row, points[i])
辞書を生成するために使用するコードを投稿できますか? – perigon