Hi Jo!
jo_hb hat geschrieben:Also worum es dabei geht: tatsächlich um Blackjack!
Du hast es aber mit Glücksspielen.
jo_hb hat geschrieben:Das mit den tupeln für alle Karten, also auch zB (4,4) liegt daran dass ich mir dachte es wäre dann irgendwie einfacher, wenn ass und andere Karten sozusagen im selben format / typ vorliegen, aber vielleicht geht's dann anders doch einfacher?
Danke jedenfalls schonmal für eure Hilfe,
Ich habe noch einmal versucht, meinen Ansatz hinsichtlich der Berechnungsgeschwindigkeit für den mehrfachen Aufruf zu optimieren - d. h. möglichst viel aus der Funktion auszulagern, was nur einmal berechnet werden muss. Da die Kombinationsmöglichkeiten aufgrund der Austauschbarkeit der Asse in der Zählung doch arg begrenzt sind und es nur 8 Asse = 9 Möglichkeiten (0-8 auf der Hand) gibt, kann man alle Kombinationen schonmal vorher abspeichern. Sowas nennen die Hacker doch "Rainbow-Table", oder?
Hier mal mein Ansatz:
Code: Alles auswählen
# Mapping Dictionary berechnen, das fuer die Anzahl der Asse die
# moeglichen Punktzahl-Kombinationen liefert
dMap = {}
for iAces in xrange(9):
dMap[iAces] = [(9 * i + iAces) for i in xrange(iAces+1)]
print dMap
def calc_hand(lCards):
"Berechnung der Punktzahl-Kombinationen aus Assen und zusammengezogenem Rest"
iAces = lCards.count(1)
iStaticValue = sum(lCards)-iAces
return map(lambda iDynValue: iDynValue + iStaticValue, dMap[iAces])
l = [4, 1, 7, 10, 1]
print calc_hand(l)
Aber da habe ich auch eine Frage: was ist schneller, in calc_hand die Lambda-Funktion zu erzeugen oder doch alternativ mit zip eine Liste von Tupeln, die man per map(sum...) aufsummiert? Dann muss man aber aus iStaticValue auch erst eine Liste oder einen Generator machen...
Grüße,
Michael
Diese Nachricht zersört sich in 5 Sekunden selbst ...