Hallo ich hab ein problem ich will eine Art kartenspiel programmieren und will dazu die symbole "pik, herz, etc." benutzen das hab ich mit dem unicode gemacht und dann jeweils ein variablen zugeordent (zb. P = pik)
Mein Problem jetzt ist es das ich eine liste anfertigen will mir allen karten die es gibt (32) und wenn ich aufrufe l[0] soll zb. 3pik herausgegeben werden in der shell ich kann aber nicht den int mit einem string verbinden. Also ist meine frage wie hänge ich in einer liste in einem element ein string direkt an ein integer oder muss ich das umgehen??
Danke für alle antworten
Grüße Hechi~~!
Liste int -> strin
Es wäre schön, wenn du konkreten Code gezeigt und/oder eine echte Fehlermeldung angegeben hättest.JustHechi hat geschrieben:Also ist meine frage wie hänge ich in einer liste in einem element ein string direkt an ein integer oder muss ich das umgehen?
Hier mal ein Denkanstoß.
Code: Alles auswählen
>>> i = 42
>>> s = 'answer'
>>> print(s + i)
Traceback (most recent call last):
File "<pyshell#29>", line 1, in <module>
print(s + i)
TypeError: Can't convert 'int' object to str implicitly
>>> print(s + str(i))
answer42
>>> print('The {0} is {1}.'.format(s, i))
The answer is 42
sorry hatte ich eigentlich gemacht hab wohl nicht richtig eingefügt
also hier mein code Abschnitt arbeite das erste mal mit Listen....
also wie schon gesagt ich will das das karten symbo direkt hinter der zahl ist wenn ich den index der liste aufrufe muss ich dann die zahl zu string umwandeln?
nochmal danke für alle antworten~~
also hier mein code Abschnitt arbeite das erste mal mit Listen....
Code: Alles auswählen
>>> P
'♠'
>>> H
'♥'
>>> K
'♣'
>>> R
'♦'
>>> Stapel = [3K, 3P, 3R, 3H]
SyntaxError: invalid syntax
>>> Stapel = [3+K, 3+P]
Traceback (most recent call last):
File "<pyshell#102>", line 1, in <module>
Stapel = [3+K, 3+P]
TypeError: unsupported operand type(s) for +: 'int' and 'str'
>>>
also wie schon gesagt ich will das das karten symbo direkt hinter der zahl ist wenn ich den index der liste aufrufe muss ich dann die zahl zu string umwandeln?
nochmal danke für alle antworten~~
3K ist kein gültiger Wert. Python verbindet nicht auf magische Art und Weise irgendwelche Dinge miteinander. Du willst im Endeffekt einen String haben der wie folgt aussieht: '3♣'. Also musst du die beiden gewünschten Teile miteinander verbinden. Das ist dann beispielsweise '3' + K.JustHechi hat geschrieben:Code: Alles auswählen
>>> P '♠' >>> H '♥' >>> K '♣' >>> R '♦' >>> Stapel = [3K, 3P, 3R, 3H] SyntaxError: invalid syntax
Ich halte es übrigens nicht für eine gute Idee, die Typen an die einzelnen Namen P, H, K und R zu binden. Du solltest eine Liste oder eine andere geeignete Datenstruktur in Erwägung ziehen Damit würdest du dir auch die Erzeugung der Karten einfacher machen. Ich mag mir gar nicht vorstellen, wie das aktuell aussieht.
Code: Alles auswählen
>>> import itertools
>>> suits = '♣♠♥♦'
>>> values = '23456789BDKA'
>>> print(list(itertools.product(values, suits)))
[('2', '♣'), ('2', '♠'), ('2', '♥'), ('2', '♦'), ('3', '♣'), ('3', '♠'), ('3', '♥'), ('3', '♦'), ('4', '♣'), ('4', '♠'), ('4', '♥'), ('4', '♦'), ('5', '♣'), ('5', '♠'), ('5', '♥'), ('5', '♦'), ('6', '♣'), ('6', '♠'), ('6', '♥'), ('6', '♦'), ('7', '♣'), ('7', '♠'), ('7', '♥'), ('7', '♦'), ('8', '♣'), ('8', '♠'), ('8', '♥'), ('8', '♦'), ('9', '♣'), ('9', '♠'), ('9', '♥'), ('9', '♦'), ('B', '♣'), ('B', '♠'), ('B', '♥'), ('B', '♦'), ('D', '♣'), ('D', '♠'), ('D', '♥'), ('D', '♦'), ('K', '♣'), ('K', '♠'), ('K', '♥'), ('K', '♦'), ('A', '♣'), ('A', '♠'), ('A', '♥'), ('A', '♦')]
>>> print([''.join(card) for card in itertools.product(values, suits)])
['2♣', '2♠', '2♥', '2♦', '3♣', '3♠', '3♥', '3♦', '4♣', '4♠', '4♥', '4♦', '5♣', '5♠', '5♥', '5♦', '6♣', '6♠', '6♥', '6♦', '7♣', '7♠', '7♥', '7♦', '8♣', '8♠', '8♥', '8♦', '9♣', '9♠', '9♥', '9♦', 'B♣', 'B♠', 'B♥', 'B♦', 'D♣', 'D♠', 'D♥', 'D♦', 'K♣', 'K♠', 'K♥', 'K♦', 'A♣', 'A♠', 'A♥', 'A♦']
mein problem ist es das ich eine liste will von 32-karten 2-9 mit jeweils den 4 symbolen
aber ich will die am besten als Liste damit ich den befehl benutzen kann s.count um zu bestimmen wie viele 3-er karten ein spieler hat z.b. ohne auf die symbole zu achten und ich weiß nicht wie ich das zusammen in eine liste und als eine funktion schreiben kann
ich hab halt das wissen was ich machen will aber ich kenn mich noch zu wenig aus ich weiß ich sollte es selber suchen und dann bin ich schlauer aber ich mach das schon seit 2-tagen und wenns soweiter geht dauerts auch noch doppelt solang und 5x soviel code....
hier ist das beispiel das von oben und ich wills in etwa auch so bloß das ich eingeben kann s.count (2) und dann halt 4 rauskommt
ich hoffe wirklich wirklich jemand kann mir vllt ein kleinen schubser in die richtige richtung geben
danke für jede antwort!
Grüße Hechi~~!
aber ich will die am besten als Liste damit ich den befehl benutzen kann s.count um zu bestimmen wie viele 3-er karten ein spieler hat z.b. ohne auf die symbole zu achten und ich weiß nicht wie ich das zusammen in eine liste und als eine funktion schreiben kann
ich hab halt das wissen was ich machen will aber ich kenn mich noch zu wenig aus ich weiß ich sollte es selber suchen und dann bin ich schlauer aber ich mach das schon seit 2-tagen und wenns soweiter geht dauerts auch noch doppelt solang und 5x soviel code....
Code: Alles auswählen
s = [(2, '♣'), (2, '♠'), (2, '♥'), (2, '♦'), ('3', '♣'), ('3', '♠'), ('3', '♥'), ('3', '♦'), ('4', '♣'), ('4', '♠'), ('4', '♥'), ('4', '♦'), ('5', '♣'), ('5', '♠'), ('5', '♥'), ('5', '♦'), ('6', '♣'), ('6', '♠'), ('6', '♥'), ('6', '♦'), ('7', '♣'), ('7', '♠'), ('7', '♥'), ('7', '♦'), ('8', '♣'), ('8', '♠'), ('8', '♥'), ('8', '♦'), ('9', '♣'), ('9', '♠'), ('9', '♥'), ('9', '♦')]
>>> s
[(2, '♣'), (2, '♠'), (2, '♥'), (2, '♦'), ('3', '♣'), ('3', '♠'), ('3', '♥'), ('3', '♦'), ('4', '♣'), ('4', '♠'), ('4', '♥'), ('4', '♦'), ('5', '♣'), ('5', '♠'), ('5', '♥'), ('5', '♦'), ('6', '♣'), ('6', '♠'), ('6', '♥'), ('6', '♦'), ('7', '♣'), ('7', '♠'), ('7', '♥'), ('7', '♦'), ('8', '♣'), ('8', '♠'), ('8', '♥'), ('8', '♦'), ('9', '♣'), ('9', '♠'), ('9', '♥'), ('9', '♦')]
>>> s.count (2)
0
ich hoffe wirklich wirklich jemand kann mir vllt ein kleinen schubser in die richtige richtung geben
danke für jede antwort!
Grüße Hechi~~!
Mich hat noch eine PM mit einer Frage erreicht und ich möchte sie hier beantworten. (Edit: Ah, die Frage ist jetzt auch hier)
Es geht darum, wie ich in einer Liste von Karten die Karten mit einem bestimmten Wert zählen kann.
Grundsätzlich bietet es sich dabei an, Kartenwert und Symbol getrennt voneinander zu halten. Das macht die Verarbeitung auf Dauer leichter und für die Ausgabe kann man die Daten problemlos zusammenfügen. Das einfachste ist es erst einmal die Werte in einem Tupel zusammenzufassen: (3, '♣').
Jetzt wollen wir die Karten mit einem bestimmten Wert zählen. Dafür müssen wir uns jede Karte anschauen, also brauchen wir schon mal eine Schleife über alle Karten. In der Schleife schauen wir uns dann gezielt das erste Element des Tupels (Index 0!) an um den Wert zu bekommen. An der zweiten Stelle (Index 1!) steht das Symbol. Passt also der Wert der aktuellen Karte zum gesuchten Wert, dann erhöhen wir einen Zähler um 1.
Im Code könnte das dann so aussehen:
Man kann das Tupel auch direkt in seine Bestandteile zerlegen:
Ich würde es vermutlich wie folgt lösen:
Speichere dir diesen Code einfach irgendwo ab und versuche ihn im Lauf der Zeit zu verstehen. Noch bist du ja bei den Grundlagen.
Der Aufruf sieht dann einfach so aus:
Es geht darum, wie ich in einer Liste von Karten die Karten mit einem bestimmten Wert zählen kann.
Grundsätzlich bietet es sich dabei an, Kartenwert und Symbol getrennt voneinander zu halten. Das macht die Verarbeitung auf Dauer leichter und für die Ausgabe kann man die Daten problemlos zusammenfügen. Das einfachste ist es erst einmal die Werte in einem Tupel zusammenzufassen: (3, '♣').
Code: Alles auswählen
# nicht so gut
cards = ['♣', '2♠', '2♥', '2♦', '3♣', '3♠', '3♥', '4♣', '4♠', '6♣']
#besser
cards = [(2, '♣'), (2, '♠'), (2, '♥'), (2, '♦'), (3, '♣'), (3, '♠'), (3, '♥'), (4, '♣'), (4, '♠'), (6, '♣')]
Im Code könnte das dann so aussehen:
Code: Alles auswählen
def count_cards_by_value_1(cards, value_to_search):
counter = 0
for card in cards:
if card[0] == value_to_search:
counter += 1
return counter
Code: Alles auswählen
def count_cards_by_value_2(cards, value_to_search):
counter = 0
for card_value, card_suit in cards:
if card_value == value_to_search:
counter += 1
return counter
Code: Alles auswählen
def count_cards_by_value_3(cards, value_to_search):
return len(list(filter(lambda card: card[0] == value_to_search, cards)))
Der Aufruf sieht dann einfach so aus:
Code: Alles auswählen
print(count_cards_by_value_1(cards, 4))
Das bekommt man mit einem Generatorausdruck IMHO unkomplizierter hin:
Code: Alles auswählen
def count_cards_by_value_4(cards, value_to_search):
return sum(1 for value, suite in cards if value == value_to_search)
Ja, bekommt man. Das ist definitiv schöner.BlackJack hat geschrieben:Das bekommt man mit einem Generatorausdruck IMHO unkomplizierter hin:Code: Alles auswählen
def count_cards_by_value_4(cards, value_to_search): return sum(1 for value, suite in cards if value == value_to_search)
Oder gleich die Wahrheit zum zählen benutzen:
Code: Alles auswählen
def count_cards_by_value_5(cards, value_to_search):
return sum(value == value_to_search for value, suite in cards)