Ich habe das Problem, Variablennamen aus Strings zuweisen zu wollen. Ich verstehe, dass dies dynamische Variablennamen zuweist, aber Lösungen auf anderen Seiten, die ich nicht für diese Situation anwende, oder ich verstehe es einfach nicht.Zuweisen von Klassenvariablen durch Iteration eines Strings in Python
Ich versuche, eine Zeichenfolge in ein Schachbrett zu verwandeln, wobei die Tafel eine Liste von Listen ist. Jede listet eine Zeile auf, jeder Eintrag seine jeweilige Spalte.
def splitString(string, length):
"""Split string into lengths on n."""
return [string[i:i + length] for i in range(0, len(string), length)]
def colourFromCase(letter):
"""Work out if a letter is uppercase, therefore white."""
if letter.isupper():
return 'white'
else:
return 'black'
def buildBoard(height, width):
"""Build a board."""
global rows
rows = []
board = 'CNBHKDRNCPPPPPPPPPpppppppppcnrdkhbnc'
split = splitString(board, width)
for n in split[0]:
className = eval(str(ABBRIVIATIONS[(n.upper())]) +
'(' + colourFromCase(n) + ')
Der Schwerpunkt liegt auf der buildBoard-Funktion - der letzten for-Schleife. Ich muss eine Variable mit dem Namen von n machen, die eine Klassenvariable ist.
Meine erste Vermutung wäre:
eval(n) = eval(str(ABBRIVIATIONS[(n.upper())]) +
'(' + colourFromCase(n) + ')
Ich verstehe, ich habe nicht unglaublich klar gemacht dies. Ich denke nicht, eval oder exec ist der Weg zu gehen, aber ich sehe nicht, wie ich Wörterbücher oder getattr() dies tun könnte, seit ich die Variable zu einem Board mit board.append ()
Tun Sie das nicht. Es ist fast nie notwendig. Verwenden Sie stattdessen ein Wörterbuch, um String/Wert-Paare zu speichern. Die Verwendung von "eval" sollte rote Flaggen haben. – Carcigenicate
Durch einen Zufall könnten Sie mich mit einem Ort mit Beispielen verbinden, ich habe keine Ahnung, was ich googlen soll ... – Skidushe
Wissen Sie, was ein Wörterbuch ('{}') in Python ist? – Carcigenicate