Seite 1 von 1

String einem Wert einer Liste zuordnen

Verfasst: Sonntag 16. Dezember 2012, 12:58
von Timm1912
Hi Leute habe folgendes Problem:
Ich möchte einem Wert aus einer Liste,den ich per input festlege,einen String 'x' zuordnen.
Jetzt bekomme ich folgenden Fehler:
TypeError: 'tuple' object does not support item assignment
Wie kann ich dieses Problem lösen?

Code: Alles auswählen

Feld = (1,2,3,
        4,5,6,
        7,8,9)

def show():
    print (Feld[0],'|',Feld[1],'|',Feld[2])
    print ('---------')
    print (Feld[3],'|',Feld[4],'|',Feld[5])
    print ('---------')
    print (Feld[6],'|',Feld[7],'|',Feld[8])


while True:
    input = int(input('Wähle ein Feld:'))
    input = input - 1

    if Feld[input] != 'x' and Feld[input] != 'o' :
        Feld[input]= 'x'
        

    else:
        print ('Dieses Feld ist bereits belegt!')

Re: String einem Wert einer Liste zuordnen

Verfasst: Sonntag 16. Dezember 2012, 13:10
von BlackJack
@Timm1912: Du könntest ein Tutorial durcharbeiten um den Unterschied zwischen Tupeln (was die Fehlermeldung ziemlich deutlich sagt) und Listen kennen zu lernen und für `Feld` dann tatsächlich eine Liste verwenden. :-)

Wegen `Feld` noch der Hinweis auf: PEP 8 -- Style Guide for Python Code.

Re: String einem Wert einer Liste zuordnen

Verfasst: Sonntag 16. Dezember 2012, 13:16
von Sirius3
Hallo Timm1912,

mach Dir den Unterschied zwischen Tupeln und Listen klar.
Bei Tupeln lassen sich die Elemente nachträglich nicht mehr ändern.

input als Variablennamen zu verwenden ist schlecht, da die Eingabefunktion schon input heißt.
Beim zweiten Durchlauf wird es dadurch einen Fehler geben.

Code: Alles auswählen

Feld = [1,2,3,
        4,5,6,
        7,8,9]

def show():
    print('{} | {} | {}'.format(*Feld[0:3]))
    print('---------')
    print('{} | {} | {}'.format(*Feld[3:6]))
    print('---------')
    print('{} | {} | {}'.format(*Feld[6:9]))

while True:
    feldnum = int(input('Wähle ein Feld:')) - 1

    if Feld[feldnum] not in ('x','o'):
        Feld[feldnum]= 'x'
    else:
        print('Dieses Feld ist bereits belegt!')
Grüße
Sirius

Re: String einem Wert einer Liste zuordnen

Verfasst: Sonntag 16. Dezember 2012, 13:42
von Timm1912
Danke für die schnelle Antwort,funktioniert super. Aber könntest du vl noch die Befehlszeile:

Code: Alles auswählen

print('{} | {} | {}'.format(*Feld[0:3]))
erklären?

Re: String einem Wert einer Liste zuordnen

Verfasst: Sonntag 16. Dezember 2012, 14:25
von kbr
@Timm1912: Das Stichwort heißt String-Formatierung. Hier findest Du die Docu. Dort sind auch Beispiele.

Re: String einem Wert einer Liste zuordnen

Verfasst: Sonntag 16. Dezember 2012, 14:46
von Timm1912
und was muss ich schreiben,wenn ich überprüfen will,ob zwei 'x' in einer Reihe sind ?

Re: String einem Wert einer Liste zuordnen

Verfasst: Sonntag 16. Dezember 2012, 15:09
von BlackJack
@Timm1912: Die 'x' in der Reihe zählen und mit 2 vergleichen. Schau Dir die Methoden an, die es auf Listen gibt.

Re: String einem Wert einer Liste zuordnen

Verfasst: Sonntag 16. Dezember 2012, 16:22
von /me
Timm1912 hat geschrieben:und was muss ich schreiben,wenn ich überprüfen will,ob zwei 'x' in einer Reihe sind ?
http://docs.python.org/2/library/stdtyp ... ence-types

Dort in der Tabelle findest du die Operation die du suchst.

Re: String einem Wert einer Liste zuordnen

Verfasst: Sonntag 16. Dezember 2012, 20:43
von Timm1912
Danke genau das habe ich gesucht

Re: String einem Wert einer Liste zuordnen

Verfasst: Dienstag 18. Dezember 2012, 21:03
von Hyperion
Oder Du abstrahierst von der Darstellung auf dem Bildschirm und der Belegung Deiner Felder und füllst diese mit 1 und 4. Dann kannst Du einfach per Addition der Zellen überprüfen, ob eine Reihe schon belegt oder noch frei ist - ich vermute mal, dass es sich um einen Tic Tac Toe Clone handeln soll?