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