Ich arbeite an einem Algorithmus, um automatisch Zeichenblätter für ein Rollenspiel zu erstellen. Im Spiel haben Sie Attribute, in die Sie Punkte setzen, um sie zu erhöhen. Bei einem bestimmten Wert dauert es jedoch 2 Punkte, um den Wert des tatsächlichen Attributs um 1 zu erhöhen. Sie beginnen mit einer bestimmten Anzahl von Punkten, und jedes Attribut hat standardmäßig den WertWie man auf bestimmte Werte in Python aufrundet
Ich habe ein Programm, das Ordnet die Punkte zufällig zu, aber ich bin fest, wie ich dann diese Werte ändern (die in einem Wörterbuch sind), um bei Bedarf abzurunden.
Zum Beispiel, wenn ich 3 Punkte in "Stärke", das ist in Ordnung, bekomme ich einen "Stärke" -Wert von 3 (einschließlich der Basis 1). Wenn ich jedoch 4 Punkte einstelle, sollte ich immer noch nur einen Wert von 4 haben. Es sollte 5 Punkte (plus die Basis 1) nehmen, um einen Wert von 5 zu bekommen. Es braucht dann noch 2 Punkte, um einen Wert von zu erhalten 6, 3 Punkte einen Wert von 7 und 3 Punkte bekommen Wert von 8.
der Code, den ich die attibutes zuweisen bin mit zur Zeit zu erhalten wie folgt aussieht:
attributes = {}
row1 = ['strength', 'intelligence', 'charisma']
row2 = ['stamina', 'willpower']
row3 = ['dexterity', 'wits', 'luck']
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)
assignRow(row1, 7)
assignRow(row2, 5)
assignRow(row3, 3)
Was ich will, ist nur eine einfache Funktion, die das Wörterbuch "attributes" als Parameter akzeptiert und die Anzahl der Punkte, die jedes Attribut hat, in den richtigen Wert umwandelt.
heißt "strength": 4
Aufenthalte als "strength": 4
, aber "wits": 6"
geht bis auf "wits": 5"
und "intelligence: 9
geht bis auf "intelligence: 7"
.
Ich bin etwas Neues zu Wörterbuch und so die Art und Weise unter Verwendung würde ich dies in der Regel Ansatz:
def convert(list):
for i in range(len(list)):
if list[i] <= 4:
list[i] = list[i]
if list[i] in (5, 6):
list[i] -= 1
if list[i] in (7, 8):
list[i] -= 2
if list[i] in (9, 10):
list[i] = 6
if list[i] in (11, 12, 13):
list[i] = 7
else:
list[i] = 8
nicht effizient oder hübsch, aber immer noch ein solutuion. Sie können jedoch nicht einfach Indizes in einem Dictionary durchlaufen, so dass ich mir nicht ganz sicher bin, wie ich so etwas machen soll.
Allgemeine Erklärung oder Funktion würde geschätzt werden.
Ich schätze, dass als Anfänger Sie sich die Zeit genommen und Mühe um Ihre eigene Lösung zu machen, bevor Sie fragen. Egal wie ineffizient es ist, Sie werden in der Lage sein, andere Lösungen viel besser zu verstehen, und Sie sind bereits als Programmierer gewachsen. –
Verwenden Sie nicht den Namen des eingebauten Namens 'list'. Es ist üblich mindestens 'list_' zu verwenden. Es ist nicht so, dass Ihr Code sofort bricht, aber Sie werden nicht in der Lage sein, die eingebaute Funktion aufzurufen, um Dinge in Listen umzuwandeln. Auch die Zeile 'row = list' macht praktisch nichts Sinnvolles. Rufen Sie einfach den Eingabeparameter 'row' an und töten Sie zwei Fliegen mit einer Klappe. –
@MadPhysicist Danke, ich habe das Programm aktualisiert –