WinFuture-Forum.de: [python] Arrays Dimensionieren... - WinFuture-Forum.de

Zum Inhalt wechseln

Nachrichten zum Thema: Entwicklung
Seite 1 von 1

[python] Arrays Dimensionieren... ... deren Größe von Variablen abhängt


#1 Mitglied ist offline   Astorek 

  • Gruppe: aktive Mitglieder
  • Beiträge: 1.145
  • Beigetreten: 28. Juli 07
  • Reputation: 42
  • Geschlecht:Männlich

geschrieben 08. März 2008 - 10:46

Hi @ all,

Tjoar, eine kurze Problembeschreibung: Ich möchte ein tilebasiertes 2D-Spiel (beispielsweise TicTacToe) erstellen. Für das Speichern des Spielfelds ist ein Array zuständig.

Wenn ich weiß, wieviele Felder es zu initialisieren gibt, habe ich mit Python überhaupt kein Problem:

feld = [[0,0,0],
		[0,0,0],
		[0,0,0]]

Die Felder würde ich dann natürlich nach dem Motto feld[y][x] abfragen.

Das Dumme (und mein Problem) ist: Was mache ich, wenn ich die Höhe und Breite des Arrays nicht fest vorgeben will, sondern von anderen Variablen abhängen?
Ich habe früher in QBasic programmiert, dort wurde das Problem folgendermaßen gelöst:

var_y = 3
var_x = 3
dim array(var_y, var_x)

Meine Frage: Ist das irgendwie auch in Python möglich, bzw. welche Schritte muss ich anwenden, um variable Arrays erreichen zu können? Mir fehlt momentan völlig das Konzept dazu... Google und Suchfunktion hat leider keine zufriedenstellende Ergebnisse gebracht...


Wär super, wenn mir jemand einen Denkansatz o.Ä. geben könnte :blush:

Dieser Beitrag wurde von Astorek bearbeitet: 08. März 2008 - 10:47

0

Anzeige



#2 Mitglied ist offline   Astorek 

  • Gruppe: aktive Mitglieder
  • Beiträge: 1.145
  • Beigetreten: 28. Juli 07
  • Reputation: 42
  • Geschlecht:Männlich

geschrieben 08. März 2008 - 15:41

Es ist höllisch interessant, in Google-Suchergebnissen zu sehen, dass anscheinend soviele Leute Probleme damit haben, es aber keine richtige Lösung dafür gibt. Durch herumprobieren bin ich jetzt auf eine mögliche Lösung gestoßen, die allerdings alles andere als elegant (geschweige denn ressourcenschonend) ist:

#!/usr/bin/python
# -*- coding: utf-8 -*-

# List/Array "feld" vorher deklarieren
feld = []

# Variablen, die die zukünftige Größe des Arrays bestimmen
xvar = 5
yvar = 3

# Schleife: Mit "range" Werte übergeben, die nachfolgend
# bis zum übergebenen Parameter hochzählt.
for y in range(yvar):
  feld.append(range(xvar))

  # Diese Schleife ist nötig, damit die Arraywerte auf "0"
  # gesetzt werden.
  for x in range(xvar):
	feld[y][x] = 0

print len(feld), feld
# Ausgabe:
# 3 [[0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0]]
#
# Entspricht:
# feld = [[0,0,0,0,0],
#		 [0,0,0,0,0],
#		 [0,0,0,0,0]]

# Ende
exit()


Jetzt bin ich allerdings doch etwas am Ende, weil ich keine Ahnung habe, wie ich das Ganze irgendwie ressourcenschonender, eleganter und "schöner" machen könnte. Hilfe wäre also immer noch herzlich Willkommen^^.

EDIT: Hmpf, die Antworten sind hier sind wirklich nicht zu verachten ._. Naja, nach längerem Hin und Her habe ich mit den sog. Dictionarys herausgefunden, dass selbst der Deklarationsname (im Gegensatz zu QBasic :\ ) von einer Schleife bestimmt werden kann. Für alle, die dasselbe Problem haben, hier ein korrigiertes Listing:
#!/usr/bin/python
# -*- coding: utf-8 -*-

feld = {}

xvar = 3
yvar = 3

for y in range(yvar):
  for x in range(xvar):
	feld[x,y] = 0

Dieser Beitrag wurde von Astorek bearbeitet: 03. April 2008 - 14:19

0

#3 Mitglied ist offline   todespudel 

  • Gruppe: Mitglieder
  • Beiträge: 1
  • Beigetreten: 25. Juni 08
  • Reputation: 0

geschrieben 25. Juni 2008 - 19:04

Ich hab das hier zufällig über die Suchfunktion gefunden und ich grabe den Thread aus, um für spätere Suchende etwas hinzuzufügen:

Ich wüsste nicht, warum ich hier unbedingt ein Dictionary nehmen sollte, wenn man das ganze mit list comprehensions entsprechend umsetzen kann:

x = 3
y = 3
liste = [[0 for j in xrange(y)] for i in xrange(x)]

Dieser Beitrag wurde von todespudel bearbeitet: 25. Juni 2008 - 19:04

1

Thema verteilen:


Seite 1 von 1

1 Besucher lesen dieses Thema
Mitglieder: 0, Gäste: 1, unsichtbare Mitglieder: 0