Seite 1 von 1

str.find()

Verfasst: Sonntag 26. Mai 2013, 08:25
von Tengel

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.

Re: str.find()

Verfasst: Sonntag 26. Mai 2013, 08:30
von Tengel
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.

Re: str.find()

Verfasst: Sonntag 26. Mai 2013, 08:48
von Tengel
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
>>>
 

Re: str.find()

Verfasst: Sonntag 26. Mai 2013, 09:13
von Tengel

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? :>

Re: str.find()

Verfasst: Sonntag 26. Mai 2013, 09:14
von Sirius3
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.

Re: str.find()

Verfasst: Sonntag 26. Mai 2013, 09:18
von Tengel

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 -.-

Re: str.find()

Verfasst: Sonntag 26. Mai 2013, 09:30
von Sirius3
@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.

Re: str.find()

Verfasst: Sonntag 26. Mai 2013, 09:38
von Tengel

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!

Re: str.find()

Verfasst: Sonntag 26. Mai 2013, 09:48
von 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