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
.128013:Lp(40ed3; 1Ej}Vo5_An)h]6,qc[yuvi2+DxmsU7=wlSatf9O{Rrg.TPkb8/050i0h0V0U0H0S0N0l0C0S0U0N0N0Q010V0H0d010406050N0F0M0M0U0#0E040T0r0S0F110r0v0l020U0M0d0k0l0!0h1b0#0B0F0h0N050-181a1c1e160d041C1J051M0-1M1O1J160i0H0G0_0{0}0 0x0H0$0x0S1$0x0V14050;0+0S0h1X0|0~011#1%1)1%0V1/1;1-0V0+0r0i1e1.0#1K0V0x0_1h0N0d0U0v0 0I011?1Z010W0?0h0v1p0h1-2e2g2l1^2o1;2r0M2t040a0l0)0#0r0d0r0N0H1k1m0/2c0#0#0h0C2O1C2v0v1K0-2a2!0V2827290i2x0 1)0v2q2L1-1U1W0`1@2.0H2:0v241V1-0d2T1K2Y2!35172f1m2_2m2~0#1b0S140l0m2X3915382w3b1^3d3f3h0I3k2g3m2Y2-013r0U3g040l0j3v2Z163y3p0 3B3D0l0f3H3x393z3N3h0s3R3J3T3L3A0r3e3C3h0z3Y3n3a1Y3q3%3s3E0P3,3K3/3M3;3)3E0,3^3!3`3$3(3O0X403o423V040m0g473.2`433=0m3j1D3l3Z484g4a0m3u4l3w4n4f3c3|3D0m3G4t3I3-3U4y140m3Q4C3S4o4x444H3X4K4v4F4O4b3+4R4E3#4q3@4X3_4p4G4b3 4$414(4U0m464,4M3:4U0I4d4=4w4@3=0I4k354S4Z4)0I4s371P331C2@2%0i2+3z0C242D0.1V1K320h343l3R055g0/5o4?3M140q0u0c0n0O0!0T3R0l4Y420r140Q5F5H4g13040Z5q4%2m0N2j04010u0N015S4-2m5P0b5M5T1^0M0H4H505p5,0 5P0A5+5%1^5V14010P5#4K5N5(145*4K5G5?015.144`37695^5`5v015}5X0,616e5{5@656h4|0 6b046d5=6p016g67635|5W010X6n6y6i5)6s3z6v6x3w6D6q045_6C696k014c6I6Q6f6r6V6z6v4c5$6K146U35686z6X0q3C0:6!2Z6R6A6%6:6|6v566J6t6}6T6M3#6X0K2s6`5u746L6(6i6v4B6o6-767g746X0!0r5/6,7e6~3l6;7h5/044J7k7u040p4e3U5x5z5B5D0t0u0(0Y0O0(775I5K7S5O145R4R0l7!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/0W8*0R3h8*0v0W140C3C0C0F1;0#0t2K2|0V8*5P0e9t140o0h0F9H9e8v6i0v140U0V0r1j9P040w8^3I919S149E0v0V1B7n3z5J045L9/8h828S8D6z9m040W3%983q140Ha10 0r9r042|a53A0+140#2g0$0h9Z9J966z9T049M9Oal6i9;0%9K040;0?1;aj0w9#9`7^8.69an9x0#0Vai9@7T9=abanap8*atavaIaK9D2Lajava4ar7D0waDaE6|9}0H9paM4p9w1caKaS14aua$7H045g9A9N9CaVaL7C8~0ea(a/2m9;0Q9?9R74an9V9X9Ga`9d8ta)aE9{9)049+9-abb9aP9*7r9,9.bc9:140Jbu045y5A5C0T7M7O7Q9Z0DaUa=b29caNa_b34Z140x0U1ja 0tb1aA0yblbn749}0h0@bQ7;7l9$15bmbm6|anbqby8$6zbtb7a2bpbwbrc0a6bBbDbF7K5Ebi8k14bNcca:a|bPa@04bTbRchbXbZ0Fb0cjcg8Ab5b(7Zb*3z9}2T0Vcr0vbDb{3,0-5s5n1L590-5b1C0V5dcQ2)2#23252%0U1:cLcO5k1I8P3#2T0M0t0W0U0*0h0t0x0j141u1w1y1A0lb=1L3m1J0c00050U0l0x2T0W0 0%0%0-db0-0h0L0h0#0C0H0C1A1P0Uc{0V0t0/b#bP0N0-14dgdidkdm0l181V2gbh0U3E0l2T5m0v2,1;0^3pc|2Qdm0V0ldzdjdl0h0AdW2P1v2g0idG0l0F2:0l0M2 2o9x2Oa_1S5a0:0=0@04.