Chapitre 2 Devine mon nombre ! - Apprendre en ligne.net
Chapitre 2 Devine mon nombre ! - Apprendre en ligne.net
Chapitre 2 Devine mon nombre ! - Apprendre en ligne.net
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
<strong>Devine</strong> <strong>mon</strong> <strong>nombre</strong> !2.3. Code du programme# <strong>Devine</strong> <strong>mon</strong> <strong>nombre</strong>from random import randintdevine.pyhttp://ow.ly/bVSzKnbr_essais_max = 5nbr_essais = 1borne_sup = 30<strong>mon</strong>_<strong>nombre</strong> = randint(1,borne_sup)ton_<strong>nombre</strong> = 0# <strong>nombre</strong> choisi par l'ordinateur# <strong>nombre</strong> proposé par le joueurprint("J'ai choisi un <strong>nombre</strong> <strong>en</strong>tre 1 et",borne_sup)print("A vous de le deviner <strong>en</strong>",nbr_essais_max,"t<strong>en</strong>tatives au maximum !")while ton_<strong>nombre</strong> != <strong>mon</strong>_<strong>nombre</strong> and nbr_essais <strong>mon</strong>_<strong>nombre</strong>:print("Trop grand")else:print("Bravo ! Vous avez trouvé",<strong>mon</strong>_<strong>nombre</strong>,"<strong>en</strong>",nbr_essais,"essai(s)")nbr_essais += 1if nbr_essais>nbr_essais_max and ton_<strong>nombre</strong> != <strong>mon</strong>_<strong>nombre</strong> :print("Désolé, vous avez utilisé vos",nbr_essais_max,"essais <strong>en</strong> vain.")print("J'avais choisi le <strong>nombre</strong>",<strong>mon</strong>_<strong>nombre</strong>,".")2.4. Analyse du programmeRepr<strong>en</strong>ons ce programme <strong>ligne</strong> par <strong>ligne</strong> pour l'expliquer <strong>en</strong> détails.2.4.1. Comm<strong>en</strong>tairesLes <strong>nombre</strong>spseudo-aléatoiresdonn<strong>en</strong>t l'illusiond'avoir été tirés ausort. Ils sont <strong>en</strong> faitgénérés par uneformulemathématique.Pour <strong>en</strong> savoir plussur ces <strong>nombre</strong>s :http://ow.ly/bJ2me# <strong>Devine</strong> <strong>mon</strong> <strong>nombre</strong>Ceci est un comm<strong>en</strong>taire. Les comm<strong>en</strong>taires n'ont pas d'influ<strong>en</strong>ce sur le programme lui-même ;ils sont là pour aider à la lecture et à la compréh<strong>en</strong>sion du code.Qu'est-ce qu'un bon comm<strong>en</strong>taire ?Règle 1Le comm<strong>en</strong>taire ne doit pas être redondant avec le code. Inutile de comm<strong>en</strong>ter des chosesévid<strong>en</strong>tes ! D'une manière générale, mieux le code est écrit, moins il y aura besoin de comm<strong>en</strong>taires.Règle 2Pour déterminer ce qu'il faut indiquer dans le comm<strong>en</strong>taire, se poser la question « pourquoi ? » etnon pas « comm<strong>en</strong>t ? ». En effet, on arrivera souv<strong>en</strong>t à compr<strong>en</strong>dre ce que fait une fonction sanscomm<strong>en</strong>taires, mais on ne verra pas toujours son utilité.2.4.2. Modules externesfrom random import randintCertaines fonctions ne sont pas directem<strong>en</strong>t disponibles. Il faut les importer depuis des modules.Le module random conti<strong>en</strong>t des fonctions permettant d'obt<strong>en</strong>ir des <strong>nombre</strong>s pseudo-aléatoires. On yfera appel chaque fois que l'on a besoin du hasard, ce qui arrive souv<strong>en</strong>t avec les jeux. Parmi lesfonctions disponibles, randint(a,b) r<strong>en</strong>voie un <strong>nombre</strong> <strong>en</strong>tier compris <strong>en</strong>tre les bornes a et b, lesbornes étant comprises.S'il y a plusieurs fonctions à importer, on peut écrire, par exemple, from math import *Didier Müller 2-2 août 2012
Python : objectif jeux <strong>Chapitre</strong> 22.4.3. Variablesnbr_essais_max = 5nbr_essais = 1borne_sup = 30<strong>mon</strong>_<strong>nombre</strong> = randint(1,borne_sup)ton_<strong>nombre</strong> = 0# <strong>nombre</strong> choisi par l'ordinateur# <strong>nombre</strong> proposé par le joueurNous avons ici cinq variables qu'il faut initialiser. Cela signifie qu'il faut leur donner une valeurinitiale. Si on ne le fait pas, l'interpréteur Python va <strong>en</strong>voyer le message d'erreur du g<strong>en</strong>re :NameError: name 'nbr_essais_max' is not definedC'est au mom<strong>en</strong>t où l'on initialise une variable que l'interpréteur Pythonla crée. On peut voir une variable comme une boîte qui va cont<strong>en</strong>ir unevaleur : ce peut être un <strong>nombre</strong>, une chaîne de caractères, une liste, etc.Écrire nbr_essais = 1 a pour effet de déposer dans cette boîte la valeur<strong>en</strong>tière 1. On ne pourra pas mettre autre chose que des <strong>nombre</strong>s <strong>en</strong>tiersdans cette variable par la suite.Dans la variable <strong>mon</strong>_<strong>nombre</strong> va être stockée une valeur aléatoire <strong>en</strong>tière, qui changera à chaqueexécution du programme. Il est à noter que si l'on avait omis la <strong>ligne</strong>from random import randintl'interpréteur Python aurait écrit le message d'erreur : NameError: name 'randint' is not definedprint("J'ai choisi un <strong>nombre</strong> <strong>en</strong>tre 1 et",borne_sup)print("A vous de le deviner <strong>en</strong>",nbr_essais_max,"t<strong>en</strong>tatives au maximum !")Ces deux <strong>ligne</strong>s écriv<strong>en</strong>t à l'écran le texte <strong>en</strong>tre guillemets, ainsi que les valeurs cont<strong>en</strong>ues dansles variables borne_sup et nbr_essais_max. En l'occurr<strong>en</strong>ce, on verra s'écrire sur l'écran :J'ai choisi un <strong>nombre</strong> <strong>en</strong>tre 1 et 30A vous de le deviner <strong>en</strong> 5 t<strong>en</strong>tatives au maximum !Règles pour les noms des variablesLe nom d'une variable est composé des lettres de a à z, de A à Z, et des chiffres 0 à 9, mais il nedoit pas comm<strong>en</strong>cer par un chiffre.Les lettres acc<strong>en</strong>tuées, les cédilles, les espaces, les caractères spéciaux tels que $, #, @, etc. sontinterdits, à l'exception du caractère _ (souligné). Le tiret (-) est bi<strong>en</strong> sûr interdit puisqu'il correspondaussi à la soustraction.La casse est significative : spam et Spam sont des variables différ<strong>en</strong>tes !Python compte 33 mots réservés qui ne peuv<strong>en</strong>t pas non plus être utilisés comme noms devariable (ils sont utilisés par le langage lui-même) :and as assert break class continue defdel elif else except False finally forfrom global if import in is lambdaNone nonlocal not or pass raise returnTrue try while with yieldPr<strong>en</strong>ez l'habitude d'écrire l'ess<strong>en</strong>tiel des noms de variables <strong>en</strong> caractères minuscules (y compris lapremière lettre). Il s'agit d'une conv<strong>en</strong>tion largem<strong>en</strong>t respectée. N'utilisez les majuscules ou lessoulignés qu'à l'intérieur du nom, pour <strong>en</strong> augm<strong>en</strong>ter la lisibilité. Par exemple : finDeMot oufin_de_mot.Utilisez des noms de variable qui ont un s<strong>en</strong>s afin d'augm<strong>en</strong>ter la compréh<strong>en</strong>sion du programme.Cela vous évitera d'ajouter des comm<strong>en</strong>taires pour expliquer l'utilité de ces variables.Didier Müller 2-3 août 2012
<strong>Devine</strong> <strong>mon</strong> <strong>nombre</strong> !AffectationsEn Python, on peut assigner une valeur à plusieurs variables simultaném<strong>en</strong>t. Exemple :a = b = 3On peut aussi effectuer des affectations parallèles à l'aide d'un seul opérateur :a, b = 3, 2.54Dans cet exemple, les variables a et b pr<strong>en</strong>n<strong>en</strong>t simultaném<strong>en</strong>t les nouvelles valeurs 3 et 2.54.Cela est particulièrem<strong>en</strong>t utile quand on veut échanger les valeurs de deux variables. Il suffitd'écrire :a, b = b, aComme les affectations sont simultanées, les nouvelles valeurs de a et b seront respectivem<strong>en</strong>t2.54 et 3.Notons <strong>en</strong>fin au passage qu'une instruction du type :a + 1 = 3est tout à fait illégale !Opérations sur les variables <strong>en</strong>tièresDans notre programme, toutes les variables sont du type <strong>en</strong>tier. Les opérations que l'on peut faireavec les <strong>en</strong>tiers sont les suivantes :Les priorités sontles mêmes que surune calculatricestandard. On peututiliser despar<strong>en</strong>thèses pourchanger lespriorités.Symbole Nom Exemple Résultat+ Addition 3+4 7− Soustraction 8−3 5* Multiplication 5*2 10// Division <strong>en</strong>tière 14//3 4% Reste de la division <strong>en</strong>tière 14%3 2/ Division 14/3 4.666...** Élévation à la puissance 3**4 81Tableau 2.1: opérateurs sur les <strong>nombre</strong>s <strong>en</strong>tiers2.4.4. Boucle while (tant que)while ton_<strong>nombre</strong> != <strong>mon</strong>_<strong>nombre</strong> and nbr_essais <strong>mon</strong>_<strong>nombre</strong>:print("Trop grand")else:print("Bravo ! Vous avez trouvé",<strong>mon</strong>_<strong>nombre</strong>,"<strong>en</strong>",nbr_essais,"essai(s)")nbr_essais += 1En informatique,on dit ind<strong>en</strong>téplutôt que décaléà droite.Voici une boucle Tant que. Tant que la valeur stockée dans nom_<strong>nombre</strong> sera différ<strong>en</strong>te de lavaleur stockée dans ton_<strong>nombre</strong> et que le <strong>nombre</strong> d'essais effectués sera inférieur ou égal au<strong>nombre</strong> d'essais maximum, alors toute la partie du code qui est ind<strong>en</strong>té vers la droite sera exécutée <strong>en</strong>Didier Müller 2-4 août 2012
Python : objectif jeux <strong>Chapitre</strong> 2boucle.En Python, contrairem<strong>en</strong>t aux autres langages de programmation les plus courants, cetteind<strong>en</strong>tation n'est pas seulem<strong>en</strong>t esthétique, cela fait partie de la syntaxe ! Si ce bloc n'est pas ind<strong>en</strong>té,une f<strong>en</strong>être avec le message « expected an ind<strong>en</strong>ted block » apparaîtra.Pour comparer des valeurs, on dispose des opérateurs suivants :Symbole Nom Exemple Résultat< Plus petit que 0 < 6 True> Plus grand que 0 > 6 False= 6 False== Égal à 10 == 10 True!= Différ<strong>en</strong>t de 10 != 11 TrueTableau 2.2: opérateurs de comparaisonNotez bi<strong>en</strong> la différ<strong>en</strong>ce <strong>en</strong>tre a=1, qui est une affectation (c'est-à-dire que l'on donne la valeur 1 à lavariable a, et a==1 qui est une comparaison (on teste si la valeur de a est égale à 1). Il n'y a quedeux valeurs possibles pour le résultat d'une comparaison : True (vrai) ou False (faux) : ce sont desvaleurs boolé<strong>en</strong>nes. Att<strong>en</strong>tion aux majuscules !2.4.5. Incrém<strong>en</strong>tationL'incrém<strong>en</strong>tation est une des instructions les plus déroutantes pour un débutant :nbr_essais += 1On peut aussi écrire cette instruction ainsi, sans que cela soit beaucoup plus clair :nbr_essais = nbr_essais + 1Voici ce qui se passe. On pr<strong>en</strong>d la valeur de la variable nbr_essais, on y ajoute 1, puis on remetle résultat dans la variable nbr_essais. Donc, si nbr_essais avait la valeur 1, après l'instructionnbr_essais += 1 il aura la valeur 2.Beaucoup de boucles se termin<strong>en</strong>t par une incrém<strong>en</strong>tation, comme dans notre programme. Fautede quoi, la condition d'arrêt (ici nbr_essais
<strong>Devine</strong> <strong>mon</strong> <strong>nombre</strong> !Il existe une fonction de formatage qui permet d'a<strong>ligne</strong>r jolim<strong>en</strong>t les <strong>nombre</strong>s <strong>en</strong> colonne. Parexemple,print('{:4d}'.format(a))écrira l'<strong>en</strong>tier a sur 4 espaces et le calera sur la droite.La page de référ<strong>en</strong>ce pour le formatage est :http://docs.python.org/py3k/library/string.html#string-formattingExercice 2.2Écrivez un programme qui affiche toutes les tables de multiplication de 2 à 12. Chaque tablecompr<strong>en</strong>dra 12 termes. A<strong>ligne</strong>z jolim<strong>en</strong>t les <strong>nombre</strong>s dans les tables.Exercice 2.3Écrivez un programme qui affiche toutes les puissances de 2 inférieures à 100'000.Exercice 2.4Écrivez un programme qui affiche les 30 premiers termes de la suite de Fibonacci. Il s'agit d'unesuite de <strong>nombre</strong>s dont chaque terme est égal a la somme des deux termes qui le précèd<strong>en</strong>t :1 1 2 3 5 8 13 21 34 ...2.4.6. Conversion de typeston_<strong>nombre</strong> = int(input("Votre proposition : "))La fonction input permet à l'utilisateur d'<strong>en</strong>trer une chaîne de caractères (string) au clavier. Enécrivant int(input()), on transforme le type string <strong>en</strong> un type <strong>en</strong>tier. La variable ton_<strong>nombre</strong>conti<strong>en</strong>dra donc un <strong>nombre</strong> <strong>en</strong>tier.Exercice 2.5Écrivez un programme qui calcule et affiche l'aire ( 4 r 2 ) et le volume ( 4 3 r 3 ) d'une sphèredont le rayon sera <strong>en</strong>tré à l'aide de l'instruction input. Le rayon sera un <strong>nombre</strong> réel (float).2.4.7. Conditionsif ton_<strong>nombre</strong> < <strong>mon</strong>_<strong>nombre</strong>:print("Trop petit")elif ton_<strong>nombre</strong> > <strong>mon</strong>_<strong>nombre</strong>:print("Trop grand")else:print("Bravo ! Vous avez trouvé",<strong>mon</strong>_<strong>nombre</strong>,"<strong>en</strong>",nbr_essais,"essais")Quand le joueur propose un <strong>nombre</strong>, il y a trois possibilités : soit son <strong>nombre</strong> est trop petit, soit ilest trop grand, soit c'est le bon <strong>nombre</strong>. Ces trois possibilités correspondront à trois réponsesdiffér<strong>en</strong>tes de l'ordinateur.Cela se traduira <strong>en</strong> Python par l'utilisation des instructions if... elif... else..., que l'onpeut traduire par : si..., sinon si... , sinon... Remarquez bi<strong>en</strong> le décalage du texte. On aurait pu écrireplusieurs instructions au lieu d'une. Il aurait suffi de garder le même décalage. Par exemple :if ton_<strong>nombre</strong> < <strong>mon</strong>_<strong>nombre</strong>:print("Trop petit")print("Dommage!")Didier Müller 2-6 août 2012
Python : objectif jeux <strong>Chapitre</strong> 2Exercice 2.6Écrivez un programme qui donn<strong>en</strong>t la ou les solutions de l'équation ax 2 + bx + c = 0, où a, b et csont des réels <strong>en</strong>trés à l'aide de l'instruction input.L'instruction « racine carré » (sqrt) se trouve dans le module math.Vous afficherez les résultats avec 3 chiffres après la virgule, selon cet exemple :print("x =",'{:.3f}'.format(x))Exercice 2.7Calcul de la date de Pâques - Algorithme de Thomas O'Beirne (validité : 1901-2099)Soit M l'année du calcul (pr<strong>en</strong>ons 2005 comme exemple) :• On pose n = M – 1900 (on retranche 1900 à l'année, donc n = 105 pour notre exemple) ;• On pr<strong>en</strong>d a, le reste de n dans la division par 19 (105 / 19 = 5 reste 10 ; a = 10) ;• On calcule a × 7 + 1 (ce qui donne pour l'exemple 7 × 10 + 1 = 71) ;• On <strong>en</strong> pr<strong>en</strong>d b, le résultat <strong>en</strong>tier de la division par 19 (71 / 19 = 3 donc b = 3) ;• On calcule (11 × a) – b + 4 (soit 11 × 10 – 3 + 4 = 111) ;• On <strong>en</strong> pr<strong>en</strong>d c le reste de la division par 29 (111 / 29 = 3 reste 24, donc c = 24) ;• On calcule d la partie <strong>en</strong>tière de n / 4 (105 / 4 = 26) ;• On calcule n – c + d + 31 (soit 105 – 24 + 26 + 31 = 138) ;• On <strong>en</strong> pr<strong>en</strong>d e le reste de la division par 7 (138 / 7 = 19 reste 5, donc e = 5) ;• On calcule P = 25 – c – e (dans l'exemple : P = 25 – 24 – 5 = –4) ;• La date de Pâques tombe P jours après le 31 mars (ou avant si P est négatif). Ce qui signifieque :• P = 1 correspond au 1er avril. Autrem<strong>en</strong>t dit, P positif correspond au jour du moisd'avril ;• pour P = 0, le jour de Pâques est le 31 mars ;• pour P = –1, Pâques tombe le 30 mars. Autrem<strong>en</strong>t dit, P négatif doit être ajouté à31 pour obt<strong>en</strong>ir le jour du mois de mars.Pour l'année 2005, on trouve P = –4, ce qui veut dire que Pâques est le 31 – 4 = 27 mars.En refaisant ce calcul pour l'année 2006, on trouve P = 16 : Pâques 2006 tombe le 16 avril.Programmez cet algorithme <strong>en</strong> Python.Exercice 2.8Écrivez un programme qui simule 1000 lancers d'une pièce de <strong>mon</strong>naie. Vous afficherez le<strong>nombre</strong> de piles et le <strong>nombre</strong> de faces obt<strong>en</strong>us.Exercice 2.9Python peut manipuler de très grands <strong>en</strong>tiers sans problème. Écrivez un programme pourrépondre à la question suivante :Quelle est la plus petite valeur de N pour laquelle on ait N !100 N ?Exercice 2.10Modifiez le code du § 2.3 :1. Avant de comm<strong>en</strong>cer le jeu, le programme demandera le prénom du joueur. Quand R<strong>en</strong>étrouvera le bon <strong>nombre</strong>, le programme le félicitera par la phrase :Bravo, R<strong>en</strong>é ! Vous avez trouvé 16 <strong>en</strong> 4 essai(s).2. À la fin de la partie, le programme proposera une nouvelle partie au joueur, qui répondrapar oui ou non. Quand le joueur arrêtera de jouer, le programme indiquera le pourc<strong>en</strong>tage deDidier Müller 2-7 août 2012
<strong>Devine</strong> <strong>mon</strong> <strong>nombre</strong> !réussite et le <strong>nombre</strong> moy<strong>en</strong> de t<strong>en</strong>tatives pour trouver le <strong>nombre</strong> (on ne comptabilisera le<strong>nombre</strong> de coups qu'<strong>en</strong> cas de réussite).Exemple de partieQuel est votre prénom ? R<strong>en</strong>éJ'ai choisi un <strong>nombre</strong> <strong>en</strong>tre 1 et 30A vous de le deviner <strong>en</strong> 5 t<strong>en</strong>tatives au maximum !Essai no 1Votre proposition : 15Bravo, R<strong>en</strong>é ! Vous avez trouvé 15 <strong>en</strong> 1 essai(s)Voulez-vous rejouer (o/n) ? oJ'ai choisi un <strong>nombre</strong> <strong>en</strong>tre 1 et 30A vous de le deviner <strong>en</strong> 5 t<strong>en</strong>tatives au maximum !Essai no 1Votre proposition : 1Trop petitEssai no 2Votre proposition : 9Trop petitEssai no 3Votre proposition : 14Trop petitEssai no 4Votre proposition : 19Trop petitEssai no 5Votre proposition : 21Trop petitDésolé, vous avez utilisé vos 5 essais <strong>en</strong> vain.J'avais choisi le <strong>nombre</strong> 25 .Voulez-vous rejouer (o/n) ? nPourc<strong>en</strong>tage de réussite: 50.0 %Nombre moy<strong>en</strong> de t<strong>en</strong>tatives: 1.02.5. ExceptionsSi l'utilisateur <strong>en</strong>tre autre chose qu'un <strong>nombre</strong> <strong>en</strong>tier, le programme va générer une erreur ets'arrêter. Pour éviter cela, il faut remplacer la <strong>ligne</strong> :devine-try.pyhttp://ow.ly/bVSzKton_<strong>nombre</strong> = int(input("Votre proposition : "))parwhile True:try:ton_<strong>nombre</strong> = int(input("Votre proposition : "))breakexcept ValueError:print("Réponse non valide. Réessayez !")C'est une boucle infinie dont le seul moy<strong>en</strong> de sortir (break) est d'<strong>en</strong>trer un <strong>nombre</strong> <strong>en</strong>tier. Sil'exception ValueError est levée, un message d'erreur créé par l'utilisateur est écrit à l'écran et leprogramme repose la question.Exercice 2.11Inversons les rôles ! C'est l'ordinateur qui essaiera de deviner le <strong>nombre</strong> que vous avez <strong>en</strong> tête etvous lui indiquerez si le <strong>nombre</strong> qu'il proposera est trop petit ou trop grand.Conv<strong>en</strong>tion : <strong>en</strong>trez 1 si le <strong>nombre</strong> de l'ordinateur est trop grand, 2 s'il est trop petit et 0 sil'ordinateur a trouvé le bon <strong>nombre</strong>.Prévoyez les cas où l'utilisateur <strong>en</strong>tre une réponse erronée : soit la réponse n'est pas un <strong>en</strong>tier, soitce n'est pas une des trois réponses att<strong>en</strong>dues.Didier Müller 2-8 août 2012
Python : objectif jeux <strong>Chapitre</strong> 2Le raisonnem<strong>en</strong>test analogue si fest décroissante.Exercice 2.12Il existe une méthode numérique pour trouver les zéros d'une fonction continue qui est trèssemblable à l'exercice 2.11. Elle a pour nom méthode de dichotomie (du grec « couper <strong>en</strong> deux »).Soit f une fonction telle que :• f(a) et f(b) sont de signes opposés• f est continue strictem<strong>en</strong>t croissante sur [a ; b]Une dichotomie permet de trouver rapidem<strong>en</strong>t une valeur approchée de x telle que f(x) = 0.1. Partir du couple de valeurs (a, b) ;2. Évaluer la fonction <strong>en</strong> (a+b)/2 ;3. Si f((a+b)/2) < 0, remplacer a par (a+b)/2, sinon remplacer b par (a+b)/2 (faire l'inverse sila fonction est décroissante) ;4. Recomm<strong>en</strong>cer à partir du nouveau couple de valeurs (a, b) jusqu'à ce que la différ<strong>en</strong>ce <strong>en</strong>tref(a) et f(b) soit inférieure à la précision voulue.Programmez cette méthode, puis trouvez le zéro de la fonction sin(cos(2x 2 +1)) se trouvant dansl'intervalle [0 ; 1], avec une précision de 0.0001.Courbe de la fonction sin(cos(2x 2 +1))Note1Vous aurez besoin du module externe « math », où se trouv<strong>en</strong>t les fonctions sin() et cos().Note2On peut définir très facilem<strong>en</strong>t une fonction <strong>en</strong> Python. Définissons par exemple f(x) = 3x+1 :def f(x):return 3*x+1Si on veut calculer f(3), il suffira d'écrire :print(f(3))Le résultat affiché sera : 10.Exercice 2.13 : RiskAu jeu « Risk », les combats se déroul<strong>en</strong>t ainsi : l'assaillantdésigne par leurs noms le territoire visé et le territoire attaquant.L'assaillant pr<strong>en</strong>d trois dés de même couleur (rose). Il lance autantde dés qu'il <strong>en</strong>gage d'armées (3 au maximum).Exemple : Un assaillant a 4 armées sur l'Ontario. Il attaque leQuébec avec maximum 3 armées à chaque coup de dés mais il peutattaquer, s'il le désire, avec seulem<strong>en</strong>t 1 ou 2 armées <strong>en</strong> jetant 1 ou 2dés. Le déf<strong>en</strong>seur, lui, ne peut lancer que 2 dés au maximum, mêmes'il a 3 armées ou plus sur son territoire.On compare séparém<strong>en</strong>t chacun de ses dés avec ceux de l'adversaire <strong>en</strong> comm<strong>en</strong>çant par le plusDidier Müller 2-9 août 2012
<strong>Devine</strong> <strong>mon</strong> <strong>nombre</strong> !fort de chaque côté. Les dés les plus forts gagn<strong>en</strong>t. Mais, <strong>en</strong> cas d'égalité de points, le déf<strong>en</strong>seurl'emporte, même s'il lance moins de dés.Voici plusieurs configurations de dés. L'assaillant a les dés roses et le déf<strong>en</strong>seur les dés bleus.L'assaillant peut attaquer avec 1, 2 ou 3 dés; le déf<strong>en</strong>seur peut utiliser 1 ou 2 dés.Exemple 1 Exemple 2contrecontrecontreLe déf<strong>en</strong>seur perd 1 armée. Chaque adversaire perd 1 armée.Exemple 3contrecontreÀ égalité des points, le déf<strong>en</strong>seur l'emporte. L'assaillant perd 2 armées.Exemple 4 Exemple 5contrecontrecontreL'assaillant perd 2 armées.Le déf<strong>en</strong>seur perd 1 armée.Calculez à l'aide d'une programme et notez dans le tableau ci-dessous la probabilité de chacun desévénem<strong>en</strong>ts y figurant, <strong>en</strong> fonction du <strong>nombre</strong> de dés que chacun des deux joueurs choisit de lancer.Nombrede déslancés parl'assaillant32Nombre de dés lancés par le déf<strong>en</strong>seur2 1L'assaillant perd 2 armées : %Le déf<strong>en</strong>seur perd 2 armées : %Chaque joueur perd 1 armée : %L'assaillant perd 2 armées : %Le déf<strong>en</strong>seur perd 2 armées : %Chaque joueur perd 1 armée : %1 L'assaillant perd 1 armée : %Le déf<strong>en</strong>seur perd 1 armée : %L'assaillant perd 1 armée : %Le déf<strong>en</strong>seur perd 1 armée : %L'assaillant perd 1 armée : %Le déf<strong>en</strong>seur perd 1 armée : %L'assaillant perd 1 armée : %Le déf<strong>en</strong>seur perd 1 armée : %Didier Müller 2-10 août 2012