Seite 1 von 1

unterliste

Verfasst: Mittwoch 18. Mai 2011, 15:29
von nighthawk
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)

Re: unterliste

Verfasst: Mittwoch 18. Mai 2011, 15:36
von /me
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.

Re: unterliste

Verfasst: Mittwoch 18. Mai 2011, 15:37
von EyDu
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

Re: unterliste

Verfasst: Mittwoch 18. Mai 2011, 15:47
von nighthawk
vielen dank für die schnelle antwort.

ich habe python 3.2

Eure hinweise werd ich in zukunft berücksichtigen.

Danke!

Re: unterliste

Verfasst: Mittwoch 18. Mai 2011, 17:12
von sma
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

Re: unterliste

Verfasst: Mittwoch 18. Mai 2011, 17:13
von Hyperion
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: )

Re: unterliste

Verfasst: Mittwoch 18. Mai 2011, 17:18
von sma
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