str.find()

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
Tengel
User
Beiträge: 210
Registriert: Sonntag 17. März 2013, 12:29

Code: Alles auswählen

def KarteSpielen(self, spielfeld):
        while True:
            try: 
                kartenWahl = int(input("Welche Karte möchtest du spielen: "))
                kartenWahl -= 1
                kartenWahl = int(kartenWahl)
                ausgewaehlteKarte = str(self.hand[kartenWahl])
                print(ausgewaehlteKarte)
                tischKarte = str(spielfeld.tisch[-1])
                if ausgewaehlteKarte.find(tischKarte) != -1:
                    spielfeld.tisch.append(self.hand.pop(kartenWahl))
                else:
                    print("Darf nicht gelegt werden!")
                    continue
                break
            except IndexError:
                print("Du hast keine Karte mit dieser Nummer")
            except ValueError:
                print("Ihre Wahl muss eine  Ganzzahl sein")
So zum Problem:
Ich habe Karten die eine Farbe und eine Bezeichnung haben.
zum Beispiel
"blau : 9"
"rot : Aussetzer"
Es handelt sich um Unokarten
Mit dem oben gezeigten Codestück versuche ich zu überprüfen ob die Karte gelegt werden darf, momentan funktioniert das nicht.
Es liegt rot 9
Ich möchte rot 3 > legen
Und es kommt "Darf nicht gelegt werden" was ja logisch ist.

Ich bräuchte einen Denkanstoß wie ich eine Überprüfung nach Farbe und Wert hinbekomme.
Tengel
User
Beiträge: 210
Registriert: Sonntag 17. März 2013, 12:29

Hm mir kommt gerade ich kann ja einen Slice angeben wo gesucht wird.
Ist es sinnvoll ein [0:3] für die Farbe
und ein
[-1] für die Bezeichnung zu nehmen?

Es ist dann wohl etwas "schwerer" zu lesen - aber mir fällt gerade nichts anderes ein.
Tengel
User
Beiträge: 210
Registriert: Sonntag 17. März 2013, 12:29

Hm irgendwie schein ich da was falsch verstanden zu haben.

Code: Alles auswählen

a = "Hallo Welt"
b = "Hallo"

print(b.find(a, 0, 4))

>>> 
-1
>>>
 
Tengel
User
Beiträge: 210
Registriert: Sonntag 17. März 2013, 12:29

Code: Alles auswählen

 if tischKarte.find(ausgewaehlteKarte[0:3]) != -1:
scheint zu funktionieren - oder wieder ein Fall von:
Es gibt aus was es soll aber es macht nicht was ich glaube? :>
Sirius3
User
Beiträge: 17737
Registriert: Sonntag 21. Oktober 2012, 17:20

Hallo Tengel,
es heißt ja auch finde in »b« den String »a« und zwar irgendwo zwischen Position 0 und 4.
Zwei »str« und ein »int« sollten in deinem Code nicht vorkommen. Rate mal welche;-)
Was für ein Objekt ist überhaupt »self.hand[kartenWahl]«?
Wenn es sich um ein Kartenobjekt handelt sollten diese eine Methode haben, ob die eine Karte auf die andere gelegt werden darf. Was Du mit »find« anstellen willst ist mir rätselhaft.
Tengel
User
Beiträge: 210
Registriert: Sonntag 17. März 2013, 12:29

Code: Alles auswählen

Es liegt: blau : 0 

Deine Hand
1 rot : Aussetzer
2 rot : 5
3 grün : Gegner +2
4 blau : Aussetzer
5 rot : 2
6 grün : 2
7 grün : 1
Welche Karte möchtest du spielen: 4
Es liegt: blau : Aussetzer 

Deine Hand
1 gelb : Aussetzer
2 grün : 4
3 gelb : 6
4 blau : 4
5 rot : 9
6 rot : Richtung umkehren
7 grün : 6
Welche Karte möchtest du spielen: 4
Es liegt: blau : 4 

Deine Hand
1 rot : Aussetzer
2 rot : 5
3 grün : Gegner +2
4 rot : 2
5 grün : 2
6 grün : 1
Welche Karte möchtest du spielen: 1
Darf nicht gelegt werden!
Welche Karte möchtest du spielen: 


Tjaaaaaaaaaaaaaaaaaaa ..... hätte ich eine Methode in der Kartenklasse geschrieben ...um simpel name mit name und farbe mit farbe vergleichen zu können? NÖ zu einfach

Oder schlicht und ergreifend ...ich bin schlecht -.-
Sirius3
User
Beiträge: 17737
Registriert: Sonntag 21. Oktober 2012, 17:20

@Tengel: Du darfst Klassen nachträglich erweitern. Das ist nicht schlecht sondern gut. Du hast am Anfang Deine Klasse nicht unnötig komplex gemacht, jetzt wo Du merkst, es fehlt noch etwas, fügst Du es einfach hinzu.
Tengel
User
Beiträge: 210
Registriert: Sonntag 17. März 2013, 12:29

Code: Alles auswählen

def kompatibelPrüfen(self, other):
        if self.farbe == other.farbe or self.bezeichnung == other.bezeichnung:
            return True
        else:
            return False


Es kann manchmal so einfach sein ...MAGIC!
BlackJack

@Tengel: Da die Bedingung ja schon zu `True` oder `False` ausgewertet wird, kann man das etwas einfacher ausdrücken:

Code: Alles auswählen

def kompatibelPrüfen(self, other):
    return self.farbe == other.farbe or self.bezeichnung == other.bezeichnung
Antworten