Menu

Aide pour blackjack

Messages postés
4
Date d'inscription
vendredi 3 mai 2019
Statut
Membre
Dernière intervention
6 mai 2019
- - Dernière réponse : quent217
Messages postés
326
Date d'inscription
vendredi 25 septembre 2015
Statut
Membre
Dernière intervention
6 mai 2019
- 6 mai 2019 à 18:30
Bonjour , Voila j'ai un programme à faire et je bloque sur l'addition des sommes.

J'ai vu sur le net qu'on utilise " sum" or moi lorsque je l'utilise sa m'affiche " unsup", line 31, in <module>ported operand type(s) for +: 'int' and 'list'"

Après plusieurs recherche , je n'arrive pas trouver mon erreur et à calculer mais deux cartes qui sont tirés aléatoirement.

Si quelqu'un peux m'expliquer comment s'y prendre pour calculer deux cartes choisit aléatoirement par l’ordinateur.
Biensûr en attendant votre aide je ne reste pas les bras croisés :)

Cordialement Ik

Voici mon programme:

from random import*

couleur = [' pique ', ' trefle ', ' carreau ', 'coeur ']
valeur = ['j','1','2','3','4','5','6','7','8','9','10',' 10 Roi ',' 10  Pique ',' 10 trefle ', ' 10 Coeur']

def chiffre(long):
    "1"==1
    "2"==2
    "3"==3
    "4"==4
    "5"==5
    "6"==6
    "7"==7
    "8"==8
    "9"==9
    "10"==10
    "10 Pique"==10
    "10 trefle"==10
    "10 Roi"==10
    "10 Coeur"==10

list= []
for v in valeur:
    for c in couleur :
        list.append(v+" de "+c)
        print(list)

Nombrecarte = 2
print("chaque players recois ",Nombrecarte," cartes")

Croupierdonne = sample (list,Nombrecarte)


print("Voila vos cartes  : ")
print(Croupierdonne)
list=[Croupierdonne]
' + '.join(Croupierdonne)
sum(list)
print(Croupierdonne)
Afficher la suite 

Votre réponse

2 réponses

Messages postés
4
Date d'inscription
vendredi 3 mai 2019
Statut
Membre
Dernière intervention
6 mai 2019
0
Merci
Alors voila , j'ai effectué quelque modification afin de calculer ma somme mais j'arrive pas à trouver la solution.

Cordialement

from random import*

couleur = [' pique ', ' trefle ', ' carreau ', 'coeur ']
valeur = ['j','1','2','3','4','5','6','7','8','9','10',' 10 Roi ',' 10  Pique ',' 10 trefle ', ' 10 Coeur']

def chiffre(long):
    "1"==1
    "2"==2
    "3"==3
    "4"==4
    "5"==5
    "6"==6
    "7"==7
    "8"==8
    "9"==9
    "10"==10
    "10 Pique"==10
    "10 trefle"==10
    "10 Roi"==10
    "10 Coeur"==10

list= [chiffre]


for v in valeur:
    for c in couleur :
        list.append(v+" de "+c)
        print(list)


#Carte du premeier tour

Nombrecarte = 1
print("chaque players recois ",Nombrecarte," cartes")

carte_1 = sample (list,Nombrecarte)
print("Voila votre premier cartes  : ")
print(carte_1)


#Carte du second tours
Nombrecarte = 1
carte_2 = sample (list,Nombrecarte)
print("Voila votre second cartes  : ")
print(carte_2)

#Carte total:

Total=carte_1+carte_2
print(Total)

#Additionner les cartes

Somme= carte_1 +carte_2
print(Somme)
Commenter la réponse de ibokil
Messages postés
326
Date d'inscription
vendredi 25 septembre 2015
Statut
Membre
Dernière intervention
6 mai 2019
74
0
Merci
Bonjour,
la fonction sum prends en paramètres une liste de nombre et les additionnes entre eux.
Par exemple
sum([1, 2, 3])
va donner 6.
Dans votre cas, il y a 2 problèmes. D'abord,
Croupierdonne
est une liste donc
list
qui est égale à
[Croupierdonne]
est une liste de listes. C'est pour ça que vous avez une erreur.
Ensuite,
Croupierdonne
ne contient pas des entiers mais des chaines caractères, ce qui va aussi poser problème. J'imagine que votre fonction chiffre est censé dire à quelle score correspond une carte mais dans l'état actuel de votre programme, cette fonction ne fait absolument rien.
Plutôt que d'essayer de trouver le score d'une carte à partir du texte, je vous conseille de garder toutes les cartes sous une forme qui permet de trouver facilement sa valeur, par exemple un couple sous la forme
(4, "trefle")
pour un 4 de trefle et
(11, "coeur")
pour un valet de coeur, ou alors
("4", "trefle")
pour un 4 de trefle et
("valet", "coeur")
pour un valet de coeur. Ensuite vous pouvez faire une fonction qui teste correctement le score associé à une carte en faisant
def score(carte):
    if carte[0] == "1":
        return 1
    # etc.
    elif carte[0] == "roi":
        return 10

ou pour faire plus court
def score(carte):
    if carte[0].isdigit():
        return int(carte[0])
    else:
        return 10


Une fois que vous avez fait tout ça, vous n'avez plus qu'à calculer le score de chaque carte de la liste puis additionner tous les résultats.
ibokil
Messages postés
4
Date d'inscription
vendredi 3 mai 2019
Statut
Membre
Dernière intervention
6 mai 2019
-
Bonjour,

Dans un premier temps, merci pour votre réponse.
Dans un second temps , j'ai appliqué du moins j’espère ce que vous m'avez dit et j'obtient cela :
from random import*

valeur= [("AS","trefle"),(2,"trefle"),(3,"trefle"),(4,"trefle"),(5,"trefle"),(6,"trefle"),(7,"trefle"),(8,"trefle"),(9,"trefle"),(10,"trefle"),(10,"trefle roi"),(10,"trefle dame"),(10,"trefle valet"),("AS","pique"),(2,"pique"),(3,"pique"),(4,"pique"),(5,"pique"),(6,"pique"),(7,"pique"),(8,"pique"),(9,"pique"),(10,"pique"),(10,"pique roi"),(10,"pique valet"),(10,"pique dame"),("AS","carreau"),(2,"carreau"),(3,"carreau"),(4,"carreau"),(5,"carreau"),(6,"carreau"),(7,"carreau"),(8,"carreau"),(9,"carreau"),(10,"carreau"),(10,"carreau roi"),(10,"carreau valet"),(10,"carreau dame"),("AS","coeur"),(2,"coeur"),(3,"coeur"),(4,"coeur"),(5,"coeur"),(6,"coeur"),(7,"coeur"),(8,"coeur"),(9,"coeur"),(10,"coeur"),(10,"coeur roi"),(10,"coeur dame"),(10,"coeur valet")]
carte= []

for v in valeur:
        carte.append(str (v))

        print(carte)

#Carte du premier tour
print("chaque player recois 2 carte")

Nombrecarte = 1
carte_1 = sample (carte,Nombrecarte)
print("Voila votre premiere cartes  : ")
print(carte_1)

#Carte du second tours
Nombrecarte = 1
carte_2 = sample (carte,Nombrecarte)
print("Voila votre seconde cartes  : ")
print(carte_2)

#Carte total:

def score(valeur):
    sum = 0
    for c in valeur:
        if valeur in ('roi','valet','dame'):
            sum += 10
        else:
            sum += int(valeur)
    print(score)

    for c in valeur:
        if sum <= 10:
            sum += 11
        else:
            sum += 1
            return sum
score=sum([carte_1+carte_2])
print(score)


Or voila j'ai toujours le souci d'addition, sans être impolis pouvez-vous encore m'aider et m'expliquer comment faire ?
Cordialement
ibokil
Messages postés
4
Date d'inscription
vendredi 3 mai 2019
Statut
Membre
Dernière intervention
6 mai 2019
-
Re-Bonsoir,
Navré de vous dérangez mais je pense que vous attendiez beaucoup plus un programme comme celui-ci ? or j'arrive toujours pas à additionner mes deux cartes.
from random import*
import os
import random

carte= [("AS","trefle"),(2,"trefle"),(3,"trefle"),(4,"trefle"),(5,"trefle"),(6,"trefle"),(7,"trefle"),(8,"trefle"),(9,"trefle"),(10,"trefle"),(10,"trefle roi"),(10,"trefle dame"),(10,"trefle valet"),("AS","pique"),(2,"pique"),(3,"pique"),(4,"pique"),(5,"pique"),(6,"pique"),(7,"pique"),(8,"pique"),(9,"pique"),(10,"pique"),(10,"pique roi"),(10,"pique valet"),(10,"pique dame"),("AS","carreau"),(2,"carreau"),(3,"carreau"),(4,"carreau"),(5,"carreau"),(6,"carreau"),(7,"carreau"),(8,"carreau"),(9,"carreau"),(10,"carreau"),(10,"carreau roi"),(10,"carreau valet"),(10,"carreau dame"),("AS","coeur"),(2,"coeur"),(3,"coeur"),(4,"coeur"),(5,"coeur"),(6,"coeur"),(7,"coeur"),(8,"coeur"),(9,"coeur"),(10,"coeur"),(10,"coeur roi"),(10,"coeur dame"),(10,"coeur valet")]
Croupier = []
Joueur = []
score = 0
def score(carte):
    if carte[0] == "1":
        return 1
    if carte[1] == "2":
        return 2
    if carte[2] == "3":
        return 3
    if carte[3] == "4":
        return 4
    if carte[4] == "5":
        return 5
    if carte[5] == "6":
        return 6
    if carte[6] == "7":
        return 7
    if carte[7] == "8":
        return 8
    if carte[8] == "9":
        return 9
    if carte[9] == "10":
        return 10

    elif carte[10] == "roi":
        return 10
    elif carte[11] == "dame":
        return 10
    elif carte[12] == "valet":
        return 10

for v in carte:
        Joueur.append(str (v))

#Carte du premier tour
print("chaque player recois 2 carte")

Nombrecarte = 1
carte_1 = sample (carte,Nombrecarte)
print("Voila votre premiere cartes  : ")
print(carte_1)

#Carte du second tours
Nombrecarte = 1
carte_2 = sample (carte,Nombrecarte)
print("Voila votre seconde cartes  : ")
print(carte_2)
#vos deux cartes
les_deux_cartes = carte_1 + carte_2
print(les_deux_cartes)

score= carte_1 + carte_2
print(score)
quent217
Messages postés
326
Date d'inscription
vendredi 25 septembre 2015
Statut
Membre
Dernière intervention
6 mai 2019
74 > ibokil
Messages postés
4
Date d'inscription
vendredi 3 mai 2019
Statut
Membre
Dernière intervention
6 mai 2019
-
J'ai l'impression que mon explication n'était pas suffisament claire donc je vais rééxpliquer ^^
Si on prend par exemple la carte "roi de trefle", ce que j'appelle la valeur c'est "roi", la couleur c'est "trefle" et le score c'est ce que vous voulez additionner donc 10 pour le roi si j'ai bien compris.
Ensuite pour representer les cartes je vous ai proposé 2 possibilités :
("roi", "trefle")
ou
(13, "trefle")
. Dans les 2 cas c'est un couple composé de la valeur puis de la couleur mais le score n'est pas enregistré. Dans mon exemple le 13 représente le roi (valet = 11, dame = 12, roi = 13).
Dans tous les cas il ne faut pas mélanger les 2 donc soit vous mettez des entiers partout soit vous mettez des chaines de caractère partout. Donc pas
[("AS","trefle"),(2,"trefle"),...]
.
Pour créer la liste des cartes vous pouvez faire comme vous aviez fait la première fois, c'est à dire faire une liste de couleur et une liste de valeur et faire des boucles pour créer toutes les cartes, il faut juste modifier ce que vous aviez mis dans la liste valeur et le contenu des boucles.

Ensuite dans votre fonction score vous avez des choses comme ça
if carte[9] == "10":
    return 10

la carte passé en paramètre est justement l'une des cartes que vous avez créée avant donc sous la forme
("roi", "trefle")
. Ce que vous avez écrit me fait penser que vous ne savez pas ce que signifie cette notation. Il s'agit de tuple. Ce sont en fait comme des listes mais qu'on ne peut pas modifier. Si vous voulez, vous pouvez remplacer
("roi", "trefle")
par
["roi", "trefle"]
et ça fonctionnera de la même manière.
Là où je veux en venir, c'est que
carte[0]
donne
"roi"
(premier élément du tuple ou de la liste) et
carte[1]
donne
"trefle"
(deuxième élément du tuple ou de la liste) mais
carte[9]
ça n'existe pas car il n'y a que 2 éléments.
Je vous invite donc à revoir les exemples de fonction score que j'ai donné dans mon message précédent et à la refaire en prennant en compte ces nouvelles informations.
Pour rappel : la fonction score doit donner le score (donc un entier) d'une carte passé en paramètre (toujours sous la forme
("roi", "trefle")
). Par exemple si la carte est
("roi", "trefle")
le score retourné est
10
, si la carte est
("5", "pique")
le score retourné est
5
.

Pour finir, pour additionner 2 cartes, vous voulez en fait additionner le score de ces cartes (c'est à ça qu'il sert le score) donc vous faites
les_deux_cartes = score(carte_1) + score(carte_2)
. Si votre fonction score est faite correctement, cela devrai donner le résultat recherché.

J'éspère que cette explication est plus claire et vous permettra de faire ce que vous voulez faire.
Commenter la réponse de quent217