String einem Wert einer Liste zuordnen

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
Timm1912
User
Beiträge: 4
Registriert: Sonntag 16. Dezember 2012, 12:50

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!')
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.
Sirius3
User
Beiträge: 17737
Registriert: Sonntag 21. Oktober 2012, 17:20

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
Timm1912
User
Beiträge: 4
Registriert: Sonntag 16. Dezember 2012, 12:50

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?
Benutzeravatar
kbr
User
Beiträge: 1487
Registriert: Mittwoch 15. Oktober 2008, 09:27

@Timm1912: Das Stichwort heißt String-Formatierung. Hier findest Du die Docu. Dort sind auch Beispiele.
Timm1912
User
Beiträge: 4
Registriert: Sonntag 16. Dezember 2012, 12:50

und was muss ich schreiben,wenn ich überprüfen will,ob zwei 'x' in einer Reihe sind ?
BlackJack

@Timm1912: Die 'x' in der Reihe zählen und mit 2 vergleichen. Schau Dir die Methoden an, die es auf Listen gibt.
Benutzeravatar
/me
User
Beiträge: 3555
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

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.
Timm1912
User
Beiträge: 4
Registriert: Sonntag 16. Dezember 2012, 12:50

Danke genau das habe ich gesucht
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

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?
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Antworten