Seite 1 von 1
Frage dazu was im Code passiert
Verfasst: Sonntag 8. November 2020, 16:17
von Medds
Code: Alles auswählen
FARBEN = ['Herz', 'Karo', 'Kreuz', 'Pik']
RÄNGE = ['Ass', '2', '3', '4', '5', '6', '7', '8', '9', '10', 'Bube', 'Dame', 'König']
karten_wert = {'Ass':1, '2':2, '3':3, '4':4, '5':5, '6':6, '7':7, '8':8, '9':9, '10':10, 'Bube':10, 'Dame':10, 'König':10}
class Karte:
def __init__(self, farbe, rang):
self.farbe = farbe
self.rang = rang
def __repr__(self):
return self.farbe + ' ' + self.rang
class Deck:
def __init__(self):
self.deck = []
for farbe in FARBEN:
for rang in RÄNGE:
self.deck.append(Karte(farbe, rang))
def mischen(self):
random.shuffle(self.deck)
def austeilen(self):
einzelkarte = self.deck.pop()
return einzelkarte
def __str__(self):
return str(self.deck)
class Hand:
def __init__(self):
self.karten = []
self.wert = 0
self.ass = False
def __str__(self):
return str(self.karten)
def karte_ziehen(self, karte):
self.karten.append(karte)
if karte.rang == "Ass":
self.ass = True
self.wert += karten_wert[karte.rang]
Hallo liebes Forum,
leider hab ich wiedermal eine Frage die wahrscheinlich für alle sehr einfach sein wird. Was passiert in der letzten Zeile?
Also in der Zeile:
Also genauer gefragt. Ich weiß woher das self.wert kommt und auch woher das karten_wert kommt. Aber ich verstehe nicht wie aus der karte (die später durch deck.austeilen() definiert wird) ein Dictionary wird (Wenn es überhaupt so ist). Also bei der Deck erstellung wird jede Karte einzeln geholt von der Klasse Deck, aber da wird das Deck nur so erstellt das es keinen Wert hat, sondern beispielsweise nur ein String "Herz 7" ist. Falls man das irgendwie in einem Satz erklären kann wie die karte zu seinem wert kommt, wäre ich sehr dankbar.
Re: Frage dazu was im Code passiert
Verfasst: Sonntag 8. November 2020, 16:52
von Sirius3
@Medds: da ist im Code so einiges Durcheinander. karten_wert sollte eine Konstante sein, also KARTEN_WERT. RÄNGE ist eigentlich überflüssig, weil das ja das selbe ist, wie die Schlüssel von KARTEN_WERT. __repr__ sollte eine Ausgabe für Debuggingzwecke sein, das was Karte.__repr__ macht, ist aber eher das, was Karte.__str__ machen sollte. Dagegen ist das bei Deck.__str__ und Hand.__str__ geht eher in Richtung __repr__, weil Du die Repräsentation einer Liste benutzt, dazu fehlt aber noch ein die Ausgabe der Klasse.
Code: Alles auswählen
import random
FARBEN = ['Herz', 'Karo', 'Kreuz', 'Pik']
KARTEN_WERTE = {'Ass':1, '2':2, '3':3, '4':4, '5':5, '6':6, '7':7, '8':8, '9':9, '10':10, 'Bube':10, 'Dame':10, 'König':10}
class Karte:
def __init__(self, farbe, rang):
self.farbe = farbe
self.rang = rang
def __str__(self):
return f"{self.farbe} {self.rang}"
class Deck:
def __init__(self):
self.deck = []
for farbe in FARBEN:
for rang in KARTEN_WERTE:
self.deck.append(Karte(farbe, rang))
def mischen(self):
random.shuffle(self.deck)
def austeilen(self):
return self.deck.pop()
def __str__(self):
return ', '.join(map(str, self.deck))
class Hand:
def __init__(self):
self.karten = []
self.wert = 0
self.ass = False
def __str__(self):
return ', '.join(map(str, self.karten))
def karte_ziehen(self, karte):
self.karten.append(karte)
if karte.rang == "Ass":
self.ass = True
self.wert += KARTEN_WERTE[karte.rang]
Aus `karte` wird doch kein Wörterbuch. Wie kommst Du denn darauf? Eine Karte hat ein Attribut rang, das ist alles.
Re: Frage dazu was im Code passiert
Verfasst: Sonntag 8. November 2020, 17:12
von Medds
Scheint als wäre der Online Kurs den ich mache in sachen Syntax nicht der beste ist. Vielen Dank erstmal für die Antwort.
Werd mal langsam alles vergleichen und versuchen zu verstehen. Sind ja doch ein paar Änderungen die du gemacht hast.
Re: Frage dazu was im Code passiert
Verfasst: Dienstag 10. November 2020, 16:01
von Medds
Zu diesem korrigiertem Code hätte ich noch eine Frage.
Die Konstante RÄNGE wurde entfernt. Dazu hätte ich folgende Frage:
Code: Alles auswählen
class Deck:
def __init__(self):
self.deck = []
for farbe in FARBEN:
for rang in KARTEN_WERTE:
self.deck.append(Karte(farbe, rang))
Ist hier das rang schon ein Wörterbuch? (Also z.b. 'Ass':1)
Wenn ja wieso wird der Wert in
nicht mit ausgegeben?
Oder ist es so, dass mit rang
Code: Alles auswählen
for rang in KARTEN_WERTE:
self.deck.append(Karte(farbe, rang))
nur der Schlüssel des Wörterbuchs abgerufen wird?
Beziehungsweise vielleicht anders gefragt, falls ich meine Frage unverständlich geschrieben habe:
Wieso gibt:
den Wert der Karte nicht mit aus?