es geht um einen ASCII spielbrett:
Code: Alles auswählen
>>> spielfeld = 2 * [3 * [' ']]
>>> spielfeld
[[' ', ' ', ' '], [' ', ' ', ' ']]
>>> spielfeld[1][1] = "X"
>>> spielfeld
[[' ', 'X', ' '], [' ', 'X', ' ']]
>>>
danke leutz
Code: Alles auswählen
>>> spielfeld = 2 * [3 * [' ']]
>>> spielfeld
[[' ', ' ', ' '], [' ', ' ', ' ']]
>>> spielfeld[1][1] = "X"
>>> spielfeld
[[' ', 'X', ' '], [' ', 'X', ' ']]
>>>
Code: Alles auswählen
>>>sp = [['','',''],['','','']]
>>>sp[1][1] = "X"
>>>sp
[['', '', ''], ['', 'X', '']]
Code: Alles auswählen
>>>sp = [[' ' for j in range(3)] for i in range(2)]
>>>sp
[[' ', ' ', ' '], [' ', ' ', ' ']]
'X' wird nur einmal gesetzt. Und zwar in der *selben* Liste! Listen multiplizieren erzeugt keine Kopien sondern nur Referenzen.Costi hat geschrieben:hi2all
es geht um einen ASCII spielbrett:
allerdings wird dabei zweimal x gestezt, dabei dachte ich das man bei zweidimensionale dicts man sozusagen wie im koordinatensystem nach x und y setzt? und dieses ergebniss ist fuer mich irgendwie nicht logisch nachvolziebarCode: Alles auswählen
>>> spielfeld = 2 * [3 * [' ']] >>> spielfeld [[' ', ' ', ' '], [' ', ' ', ' ']] >>> spielfeld[1][1] = "X" >>> spielfeld [[' ', 'X', ' '], [' ', 'X', ' ']] >>>
Code: Alles auswählen
In [9]: spielfeld
Out[9]: [[' ', ' ', ' '], [' ', ' ', ' ']]
In [10]: spielfeld[0] is spielfeld[1]
Out[10]: True
In [11]: spielfeld = [[' '] * 3 for dummy in xrange(2)]
In [12]: spielfeld[0] is spielfeld[1]
Out[12]: False
Code: Alles auswählen
spielfeld = eval(('[' + x * ('[' + (y-1) * ('" ",') + '" "' + ']' ) + ']').replace("][", "],["))
Code: Alles auswählen
def createBoard(width, height):
retval = []
for y in xrange(height):
retval.append([' ']*width)
return retval
Code: Alles auswählen
class Spielfeld(dict):
def __getitem__(self, key):
return self.get(key, ' ')
spielfeld = Spielfeld()
spielfeld[(1,2)] = 'X'
print spielfeld[(1,2)], spielfeld[(5,1)] # 'X' ' '
for x in xrange(10):
for y in xrange(10):
print spielfeld[(x,y)],