Aide pour blackjack

Fermé
ibokil Messages postés 5 Date d'inscription vendredi 3 mai 2019 Statut Membre Dernière intervention 10 juin 2019 - 3 mai 2019 à 22:50
ibokil Messages postés 5 Date d'inscription vendredi 3 mai 2019 Statut Membre Dernière intervention 10 juin 2019 - 10 juin 2019 à 11:15
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)
A voir également:

3 réponses

ibokil Messages postés 5 Date d'inscription vendredi 3 mai 2019 Statut Membre Dernière intervention 10 juin 2019 3
Modifié le 10 juin 2019 à 11:16
Bonjour ,

Merci pour les aides apportés.
Voici mon programme Final pour ceux que ça intéresse. sous python(3.5.2.1)
                        #The BlackJack Game

from random import *   #pour indiquer qu'on fait intervenir des valeurs au hasard, (d'ou le random=hasard)

prenom = input("Bienvenue dans le jeu Black jack, Entrez votre prénom : ")
print ("Bonjour,", prenom)
print()

valeur = [ 'AS', '2' , '3' , '4' , '5' , '6' , '7' , '8' , '9' , '10' ,'Valet','Dame','Roi']
couleur = [' de Carreau  ',' de Pique ',' de Trèfle ',' de Coeur']
list = []

#----------------------------------- (1) : Mise du joueurs --------------------------------------------

mise_1 = int(input("Mise d'argent du  joueur (en e) :"))

# ---------------------------------(2) : Valeure des cartes--------------------------------------------

def score(carte) :

    if carte[0] == '0' :
        return int(0)
    elif carte[0] == 'AS' :
        AS = input("Une carte AS a ete tiree , quel valeure lui attribuer, 1 ou 11 ?")
        if AS == '1' :
            return int(1)
        else :
            return int(11)
    elif carte[0] == '1':
        return int(1)
    elif carte[0] == '2':
        return int(2)
    elif carte[0] == '3':
        return int(3)
    elif carte[0] == '4':
        return int(4)
    elif carte[0] == '5':
        return int(5)
    elif carte[0] == '6':
        return int(6)
    elif carte[0] == '7':
        return int(7)
    elif carte[0] == '8':
        return int(8)
    elif carte[0] == '9':
        return int(9)
    elif carte[0] in ('10' , 'Valet' , 'Dame' , 'Roi'):
        return int(10)


#-------------------------------- (3) : Reception des cartes--------------------------------------------

print("Chaque joueur recoit 2 Cartes !" )
print("Commencons par le Croupier")
print()   # pour faire des espaces (aerer)


                # A-Croupier

# Reception de la premiere Carte (Croupier)
carte1_Croupier= sample (valeur,1)+ sample (couleur,1)  #"sapmle" est une fonction du random, pour tirer une valeur au hasard, parmi la liste proposee
print("Croupier, Voici votre premiere carte : ")
print(carte1_Croupier)

# Reception de la deuxieme carte (Croupier)
carte2_Croupier = sample (valeur,1) + sample (couleur,1)
print("Voici la seconde : ")
print(carte2_Croupier)

# Total des cartes (Croupier)
total_cartes_Croupier = score(carte1_Croupier) + score(carte2_Croupier)
print("Le score de Croupier  est de ",total_cartes_Croupier)
print()


              # B-joueur

# Reception de la premiere Carte (joueur1)
carte1_j1= sample (valeur,1)+sample (couleur,1)
print(prenom , "voici votre premiere carte : ")
print(carte1_j1)

# Reception de la deuxieme carte (joueur1)
carte2_j1 = sample (valeur,1) + sample (couleur,1)
print("Voici la seconde carte : ")
print(carte2_j1)

# Total des cartes (joueur1)
total_cartes_j1 = score(carte1_j1) + score(carte2_j1)
print(prenom ,", votre score est de ",total_cartes_j1)
print()
# --------------------------------------(4) : Addition des cartes-----------------------------------------

nvlle_carte = input(" Quel est votre choix :'tirer carte'=1 , 'Main satisaisante' =2 ou 'Doubler la mise  =3 ?")
total_cartes2_Croupier = total_cartes_Croupier
total_cartes2_j1  =total_cartes_j1

              # A-Score Final du Croupier
if total_cartes_Croupier <= 16:
    carte3_Croupier = sample (valeur,1) + sample (couleur,1)
    print("Croupier a un score inferieur ou egal a 16, donc il tire une nouvelle carte :" ,carte3_Croupier)
    total_cartes2_Croupier = score(carte1_Croupier) + score(carte2_Croupier) + score(carte3_Croupier)
    print()
    print("Croupier, Voici le nouveau score :" , total_cartes2_Croupier)
    print()

              # B-Score Finale du Joueur 1
if nvlle_carte == "1" :
    print(prenom , ", voici votre 3e carte :")
    carte3_j1 = sample (valeur,1) + sample (couleur,1)
    print(carte3_j1)
    total_cartes2_j1 = score(carte1_j1) + score(carte2_j1) + score(carte3_j1)
    print()
    print(prenom," Voici votre nouveau score :" , total_cartes2_j1)
    print()

if nvlle_carte == "2" :
            total_cartes2_j1 = total_cartes_j1
            print()
            print(prenom,"Voici votre nouveau score : ",total_cartes2_j1)

if nvlle_carte == "3" :
    carte3_j1 = sample (valeur,1) + sample (couleur,1)
    print(carte3_j1)
    mise_1 = mise_1*2
    total_cartes2_j1 = score(carte1_j1) + score(carte2_j1) + score(carte3_j1)
    print()
    print(prenom," Voici votre nouveau score :" , total_cartes2_j1)

# ----------------------------(5) : Qui est le vainqueur ?-------------------------------------------

                # A-A propos du Black Jack

while 1 :

 if total_cartes2_j1 == 21 :
            print()
            print('Blackjack!', prenom , 'a remporter la partie, voici votre argent : ' , mise_1*2 , 'e')
            break
 if total_cartes2_Croupier == 21 :
            print()
            print('Blackjack!, Le Croupier remporte la partie ! et vous perdez ')
            break

                # B-L'egalite

 if total_cartes2_j1 ==  total_cartes2_Croupier :  # En cas d'egalite, Pour La somme final du croupier
  print()
  print('Score nul, Personne ne gagne !!!! ')
  break

 if total_cartes_2_j2 ==  total_cartes_Croupier:# Pour la premiere somme du croupier
  print()
  print('Personne gagne !!!! ')
  break

               # C-Score le plus elevee, inferieur a 21

 if 21 > total_cartes2_Croupier > total_cartes2_j1 :
    print()
    print("Croupier ",total_cartes2_Croupier, " est superieur a vous",total_cartes2_j1)
    print("Croupier Gagne!!")
    break

 if 21 > total_cartes2_j1 > total_cartes2_Croupier:
    print()
    print("Vous etes superieur avec",total_cartes2_j1," a ", total_cartes2_Croupier)
    print("Vous gagnez, " , mise_1*2 ,'euros')
    print("fin iiiiiii")
    break

 if total_cartes2_Croupier > 21:
    print('Croupier PERD , Vous gagnez!')
    break

 if total_cartes2_j1 > 21 :
    print('Vous depassez 21 , vous perdez !')
    print("Vous perdez", mise_1, "euros, Croupier remporte la partie")
    break


3
quent217 Messages postés 421 Date d'inscription vendredi 25 septembre 2015 Statut Membre Dernière intervention 1 mars 2024 347
5 mai 2019 à 17:46
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.
1
ibokil Messages postés 5 Date d'inscription vendredi 3 mai 2019 Statut Membre Dernière intervention 10 juin 2019 3
5 mai 2019 à 18:49
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
0
ibokil Messages postés 5 Date d'inscription vendredi 3 mai 2019 Statut Membre Dernière intervention 10 juin 2019 3
6 mai 2019 à 01:52
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)
0
quent217 Messages postés 421 Date d'inscription vendredi 25 septembre 2015 Statut Membre Dernière intervention 1 mars 2024 347 > ibokil Messages postés 5 Date d'inscription vendredi 3 mai 2019 Statut Membre Dernière intervention 10 juin 2019
6 mai 2019 à 18:30
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.
0
ibokil Messages postés 5 Date d'inscription vendredi 3 mai 2019 Statut Membre Dernière intervention 10 juin 2019 3
Modifié le 3 mai 2019 à 23:43
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)
0