unterliste

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
nighthawk
User
Beiträge: 2
Registriert: Mittwoch 18. Mai 2011, 15:26

Hi,

ich stehe wahrscheinlich total auf dem schlauch, aber hier mein Problem:

Ich wollte zum langsamen einstieg in python ein tic-tac-toe spiel programmieren. allerdings scheitere ich daran ein durch input bestimmtes feld zu verändern:





print ("tic tac toe")

#feld erstellen

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

# druckbefehl des feldes
for i in range (3):
print (feld)


print ("spieler 1:")
x= input (["vertikale:"])
y= input (["horizontale:"])
feld [x][y] = "1" #HIER IST DER FEHLER, das klappt nicht

# druckbefehl des feldes
for i in range (3):
print (feld)
Benutzeravatar
/me
User
Beiträge: 3555
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

Drei Bitten zu Anfang:
- Bitte gib deine Python-Version an. Zwischen Python 2 und Python 3 gibt es Syntaxunterschiede.
- Verwende bitte Python-Tags beim Einstellen von Sourcecode.
- Gib die echte Fehlermeldung des Systems an."klappt nicht" ist nicht gerade aussagekräftig.

Hinweis zum Fehler: Was ist denn der Typ von x? Mit print(type(x)) kannst du es herausbekommen.
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Hallo und willkkommen im Forum!

Ich nehme mal an, dass du Python in Version 3 benutzt. Du bekommst mit `input` einen String, der Index muss allerdings als Integer verwendet werden. Versuche bei den Inputs einfach mal:

Code: Alles auswählen

x = int(input("..."))
Und bitte packe den Code in deinem Beitrag noch in Python-Code-Tags, damit man das Programm vernünftig lesen kann. Außerdem ist es für deine nächsten Posts ganz hilfreich, wenn du angibst, was genau nicht funktioniert. Also: was erwartest du und was passiert tatsächlich. Außerdem solltest du Fehlermeldung posten (inklusive des gesamten Tracebacks). Das alles macht eine Fehlersuche sehr viel einfacher.

Sebastian
Das Leben ist wie ein Tennisball.
nighthawk
User
Beiträge: 2
Registriert: Mittwoch 18. Mai 2011, 15:26

vielen dank für die schnelle antwort.

ich habe python 3.2

Eure hinweise werd ich in zukunft berücksichtigen.

Danke!
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

Statt

Code: Alles auswählen

for i in range (3):
    print (feld[i])
würde man in Python übrigens eher

Code: Alles auswählen

for feld in felder:
    print(feld)
benutzen, wobei ich natürlich "feld" in "felder" unbenannt habe, weil diese Variable ja für eine Liste von Feldern steht und daher den Plural verdient. Auf Englisch ist das in der Regel einfacher, da es hier weniger Ausnahmen gibt und man sich die Konvention merken kann, Listen an der Pluralform mit "s" zu erkennen (field / fields).

Ach ja, und auch kein Leerzeichen zwischen "print" und der Klammer auf.


Stefan
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

sma hat geschrieben: Ach ja, und auch kein Leerzeichen zwischen "print" und der Klammer auf.
Irgend wie habe ich das Gefühl, dass diese Schreibweise in letzter Zeit speziell bei Anfängern immer öfter auftaucht. Kann sich das jemand erklären? Gibt es da eine neue "hippe" Quelle, aus der die das übernehmen? ("OpenBook" reloaded oder so :mrgreen: )
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

Theorie 1: Irgendein obskurer (irrgeleiteter) Formatierstil aus einer anderen Sprache. Es soll Leute geben, die "func (a)" oder gar "func( a )" besser als "func(a)" finden.

Theorie 2: Inspiriert durch die Klammern um if und while bei C oder Java, wo man, da erste Schlüsselwörter sind, ja ein Leerzeichen zwischen Schlüsselwort und Klammer macht, nicht aber bei Funktionsaufrufen, es sei denn man ist nach Theorie 1 fehlgeleitet.

Theorie 3: Im Tutorial stand "print 1" und mit trial und error hat man herausgefunden, dass es mit Klammern geht, aber hat (noch) nicht den Unterschied zwischen Tupel und Funktionsaufruf verstanden.

Theorie 4: Wie 3, zusätzlich mit 2, weil die meisten Syntaxhighlighter für Python auch bei Python 3 immer noch das "print" als Schlüsselwort hervorheben, auch wenn es diesen Status verloren hat.

Stefan
Antworten