La Belote

La belote est un jeu qui se joue avec 32 cartes, chaque carte ayant une hauteur et une couleur. Les différentes hauteurs sont dans l'ordre 7, 8, 9, 10, Valet, Dame, Roi, As et les différentes couleurs sont « pique », « carreau », « cœur », « trèfle ».

On modélise un paquet de cartes, en programmation orientée objet, par deux classes: une classe Carte et une classe Paquet.

Les classes Carte et Paquet

Les classes Carte et Paquet sont définies ainsi :

classDiagram
direction RL
Paquet o-- Carte
class Paquet{
    list contenu
    __init__()
    cart_pos()
    taille()
    ajoute_carte()
} 
class Carte {
    __init__()
    int hauteur
    couleur_carte()
    hauteur_carte()
    int couleur   
}
  • Classe Carte :
méthode explication
init prend un entier h et un entier c et crée la carte correspondante
couleur_carte renvoie la couleur de la carte
hauteur_carte renvoie la hauteur de la carte
  • Classe Paquet :
méthode explication
init crée un paquet vide
carte_pos prend un entier n et renvoie la carte à l'indice n
taille renvoie le nombre de cartes

Dans la classe Carte, les hauteurs et les couleurs sont repérées par les codes suivants :

🐍 Script Python
HAUTEURS = {
    1: 'As', 7: '7', 8: '8', 9: '9', 10: '10',
    11: 'Valet', 12: 'Dame', 13: 'Roi'
    }

COULEURS = {1 : "pique", 2 : "cœur", 3: "carreau", 4 : "trèfle"}
Exemple d'utilisation
>>> jeu = Paquet()
>>> jeu.ajoute_carte(Carte(1, 3))  # Ajout de l'as de carreau
>>> c1 = jeu.carte_pos(0)
>>> c1.couleur_carte()
'carreau'
>>> c1.hauteur_carte()
'As'
>>> jeu.taille()
1

Avant chaque manche, on choisit une couleur d'atout parmi les quatre couleurs.

Chaque carte rapporte des points. Ces points dépendent de la hauteur de la carte, mais aussi du fait que la couleur soit l'atout ou non.

Les points hors atout sont les suivants :

7 8 9 10 Valet Dame Roi As
0 0 0 10 2 3 4 11

Les points à l'atout sont les suivants :

7 8 9 10 Valet Dame Roi As
0 0 14 10 20 3 4 11
Calculs de points

On considère un paquet contenant les cartes suivantes : As de cœur (♥), 7 ♥, 9 de trèfle (♣), 9 de pique (♠), Valet ♣, Valet ♥, Dame de carreau (♦) et Roi ♦.

Si on choisit carreau comme atout, le décompte des points est le suivant :

As ♥ 7 ♥ 9 ♣ 9 ♠ Valet ♣ Valet ♥ Dame ♦ Roi ♦ Total
11 0 0 0 2 2 3 4 22

Si on choisit trèfle comme atout on obtient par contre :

As ♥ 7 ♥ 9 ♣ 9 ♠ Valet ♣ Valet ♥ Dame ♦ Roi ♦ Total
11 0 14 0 20 2 3 4 54

Les points des cartes sont stockés dans deux dictionnaires VALEURS et VALEURS_ATOUT. Le dictionnaire VALEURS_ATOUT est à compléter.

Écrire la fonction calculer_points qui :

  • prend en paramètres un objet jeu de la classe Paquet décrivant un jeu de cartes ainsi qu'une chaîne de caractères atout indiquant la couleur d'atout
  • et renvoie le total de points des cartes dans ce jeu.

On garantit que la variable jeu contient des cartes bien formées (couleur et hauteur valides) et que la valeur de atout fait partie de ('pique', 'cœur', 'carreau', 'trèfle').

Exemples
>>> jeu = Paquet()
>>> jeu.ajoute_carte(Carte(1, 2))
>>> jeu.ajoute_carte(Carte(7, 2))
>>> jeu.ajoute_carte(Carte(9, 4))
>>> jeu.ajoute_carte(Carte(9, 1))
>>> jeu.ajoute_carte(Carte(11, 4))
>>> jeu.ajoute_carte(Carte(11, 2))
>>> jeu.ajoute_carte(Carte(12, 3))
>>> jeu.ajoute_carte(Carte(13, 3))
>>> calculer_point(jeu, "carreau")
22
>>> calculer_point(jeu, "trèfle")
54
###(Dés-)Active le code après la ligne # Tests (insensible à la casse)
(Ctrl+I)
Entrer ou sortir du mode "deux colonnes"
(Alt+: ; Ctrl pour inverser les colonnes)
Entrer ou sortir du mode "plein écran"
(Esc)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activé, le texte copié dans le terminal est joint sur une seule ligne avant d'être copié dans le presse-papier
Évaluations restantes : 10/10
.128013s3_8ufvy n7aS1me(P24V:jtwi]D[hE)6Oo;bcdUg/T0lqAp.rL,}=+k{95Rx050N0q0y0m0A0T0b0j0M0T0m0b0b0$010y0A0W010406050b0f0p0p0m0Y0i040n0J0T0f110J0k0j020m0p0W0K0j0,0q1b0Y0U0f0q0b050Q181a1c1e160W041C1J051M0Q1M1O1J160N0A0h0_0{0}0 0E0A0P0E0T1$0E0y14050;0L0T0q1X0|0~011#1%1)1%0y1/1;1-0y0L0J0N1e1.0Y1K0y0E0_1h0b0W0m0k0 0t011?1Z010g0?0q0k1p0q1-2e2g2l1^2o1;2r0p2t040a0j0s0Y0J0W0J0b0A1k1m0/2c0Y0Y0q0M2O1C2v0k1K0Q2a2!0y2827290N2x0 1)0k2q2L1-1U1W0`1@2.0A2:0k241V1-0W2T1K2Y2!35172f1m2_2m2~0Y1b0T140j0o2X3915382w3b1^3d3f3h0t3k2g3m2Y2-013r0m3g040j0c3v2Z163y3p0 3B3D0j0u3H3x393z3N3h0+3R3J3T3L3A0J3e3C3h0H3Y3n3a1Y3q3%3s3E0l3,3K3/3M3;3)3E0e3^3!3`3$3(3O0*403o423V040o0S473.2`433=0o3j1D3l3Z484g4a0o3u4l3w4n4f3c3|3D0o3G4t3I3-3U4y140o3Q4C3S4o4x444H3X4K4v4F4O4b3+4R4E3#4q3@4X3_4p4G4b3 4$414(4U0o464,4M3:4U0t4d4=4w4@3=0t4k354S4Z4)0t4s371P331C2@2%0N2+3z0M242D0.1V1K320q343l3R055g0/5o4?3M140v0V0Z0F0O0,0n3R0j4Y420J140$5F5H4g13040)5q4%2m0b2j04010V0b015S4-2m5P0w5M5T1^0p0A4H505p5,0 5P0!5+5%1^5V14010l5#4K5N5(145*4K5G5?015.144`37695^5`5v015}5X0e616e5{5@656h4|0 6b046d5=6p016g67635|5W010*6n6y6i5)6s3z6v6x3w6D6q045_6C696k014c6I6Q6f6r6V6z6v4c5$6K146U35686z6X0v3C0:6!2Z6R6A6%6:6|6v566J6t6}6T6M3#6X0C2s6`5u746L6(6i6v4B6o6-767g746X0,0J5/6,7e6~3l6;7h5/044J7k7u040#4e3U5x5z5B5D0d0V0R0I0O0R775I5K7S5O145R4R0j7!7x7o6F5Z7c6|7f6 696*5;6#6z6B517#7$3z6X607t3z7,7w707z6P6{6$7m7@7#6|6X6m7}3#7 3w7_3#6O8c427?4m7^896F6H8j7W04667-6)7z4I8r64868m886W6F6Z8z1^8e2Z8g426*837d7~6.3Y8n8E5~6@1;1,8H6S8u807.7z4_8Z756/8C7!8o5~7a2C7*858#8f81147j738Q8B4u8T6=6F7q7s628@7V2m6v7B8}8d8R4{8~7F4R0652420(140/0g8*0z3h8*0k0g140M3C0M0f1;0Y0d2K2|0y8*5P0r9t140x0q0f9H9e8v6i0k140m0y0J1j9P040G8^3I919S149E0k0y1B7n3z5J045L9/8h828S8D6z9m040g3%983q140Aa10 0J9r042|a53A0L140Y2g0P0q9Z9J966z9T049M9Oal6i9;0X9K040;0?1;aj0G9#9`7^8.69an9x0Y0yai9@7T9=abanap8*atavaIaK9D2Lajava4ar7D0GaDaE6|9}0A9paM4p9w1caKaS14aua$7H045g9A9N9CaVaL7C8~0ra(a/2m9;0$9?9R74an9V9X9Ga`9d8ta)aE9{9)049+9-abb9aP9*7r9,9.bc9:140%bu045y5A5C0n7M7O7Q9Z0DaUa=b29caNa_b34Z140E0m1ja 0db1aA0Bblbn749}0q0@bQ7;7l9$15bmbm6|anbqby8$6zbtb7a2bpbwbrc0a6bBbDbF7K5Ebi8k14bNcca:a|bPa@04bTbRchbXbZ0fb0cjcg8Ab5b(7Zb*3z9}2T0ycr0kbDb{3,0Q5s5n1L590Q5b1C0y5dcQ2)2#23252%0m1:cLcO5k1I8P3#2T0p0d0g0m0(0q0d0E0c141u1w1y1A0jb=1L3m1J0Z00050m0j0E2T0g0 0X0X0Qdb0Q0q0-0q0Y0M0A0M1A1P0mc{0y0d0/b#bP0b0Q14dgdidkdm0j181V2gbh0m3E0j2T5m0k2,1;0^3pc|2Qdm0y0jdzdjdl0q0!dW2P1v2g0NdG0j0f2:0j0p2 2o9x2Oa_1S5a0:0=0@04.