Data Loading...
PYTHON Activité 1 : Le hasard Flipbook PDF
Dans beaucoup de jeux, le hasard a une place plus ou moins importante. Un jeu de hasard est un jeu dont le déroulement e
170 Views
162 Downloads
FLIP PDF 1.09MB
PYTHON ACTIVITE 1 LE HASARD Dans beaucoup de jeux, le hasard a une place plus ou moins importante. Un jeu de hasard est un jeu dont le déroulement est partiellement ou totalement soumis à la chance. Celle-ci peut provenir d'un tirage ou d'une distribution de cartes, d'un jet de dé, etc. Comment peut-on simuler le hasard avec PYTHON ?
TS Spécialité ISN
TS-Spécialité ISN
Thème : Langages et programmation
David LATOUCHE
Activité 1 Programmation en PYTHON Le hasard Notions de programmation abordées : Le module random Les instructions print(...) et input(...) La boucle for ... in range(...) La condition if ... elif ... else Les opérateurs de comparaison
1. Pourquoi apprendre à programmer ?
« Everybody in this country should learn how to program a computer because it teaches you how to think. » Steve Jobs, inventeur
entrepreneur
« Celui qui programme ses jeux s'amuse deux fois. »
Jacques Arsac, informaticien, professeur émérite à l’UMPC, membre de l'académie des sciences.
et
L’apprentissage de la programmation durant votre année d’ISN se fera essentiellement à travers des jeux simples afin de permettre à chacun de progresser dans la connaissance de Python.
2. Pourquoi programmer en langage PYTHON ?
Guido Von Rossum
PYTHON est un langage portable, extensible, gratuit, permettant une approche modulaire et orientée objet de la programmation. PYTHON est développé depuis 1989 par Guido van Rossum et de nombreux contributeurs bénévoles. Python est portable : il fonctionne non seulement sur Linux, mais aussi sur MacOS, et les différentes variantes de Windows. Python est gratuit, mais on peut l'utiliser sans restriction dans des projets commerciaux. Python convient aussi bien à des scripts d'une dizaine de lignes qu'à des projets complexes de plusieurs dizaines de milliers de lignes.
La syntaxe de Python est très simple et, combinée à des types de données évolués (listes, dictionnaires,...), conduit à des programmes à la fois très compacts et très lisibles. À fonctionnalités égales, un programme Python (abondamment commenté et présenté selon les canons standards) est souvent de 3 à 5 fois plus court qu'un programme C ou C++ (ou même Java) équivalent, ce qui représente en général un temps de développement de 5 à 10 fois plus court et une facilité de maintenance largement accrue. Python est orienté objet. Il supporte l'héritage multiple et la surcharge des opérateurs. • Python est un langage qui continue à évoluer, soutenu par une communauté d'utilisateurs enthousiastes et responsables, dont la plupart sont des supporters du logiciel libre. Nous utiliserons tout au long de l’année la version 3 de Python. Il est à noter qu'un programme écrit en Python 2 n'est pas compatible avec la version 3, et nécessitera quelques modifications. Installer la dernière version stable de PYTHON 3 : https://www.python.org/downloads/ Extrait de http://www.linuxcenter.org/articles/9 812/python.html
Document de référence : « Débuter avec Python au lycée » http://python.lycee.free.fr/
Page 1 / 8
TS-Spécialité ISN
Thème : Langages et programmation
David LATOUCHE
3. Utiliser PYTHON 3.1. L’éditeur intégré IDLE Lorsqu’un programme (script) comporte plusieurs lignes de commandes, il n’est pas très convivial de travailler directement dans l’éditeur IDLE de Python. On préfère créer le programme séparément dans un éditeur de codes sources tel que Notepad++ en choisissant le menu Langage >> P >> Python afin de bénéficier la coloration syntaxique. La touche Tab (tabulation) permet de créer l’indentation des blocs d’instructions. On enregistre le fichier texte avec l’extension caractéristique de Python c’est-à-dire .py. Une fois le fichier enregistré, un clic droit sur son nom permettra de sélectionner « Edit with IDLE». Dans IDLE Run >> Run Module (F5) permettra de lancer le script.
3.2. L’éditeur évolué PYSCRIPTER Une autre alternative permettant de gagner en efficacité (sous Windows) consiste à installer l’éditeur Python « opensource » et gratuit Pyscripter
: http://sourceforge.net/projects/pyscripter/
Cet IDE (Integrated Development Environment ou Environnement de développement intégré) est d'abord un éditeur de code très pratique qui permet de créer des projets Python, et d'éditer des scripts Python. Il dispose également de l'autocomplétion qui permet d'accéder facilement aux fonctions natives du langage Python. Il y a aussi une fonction qui vérifie la syntaxe en vous avertissant en soulignant le code qui pose problème, directement pendant la saisie (ce qui évite de découvrir les erreurs à la compilation). L'IDE permet de lancer le script à la volée simplement en cliquant sur le bouton Run. Et pour couronner le tout, il est compatible avec plusieurs versions de Python, très utile quand on est amené à travailler sur différents projets qui n'utilisent pas les mêmes versions de Python, ou pour tester sur d'autres versions. L'autre point fort, c'est le débuggeur qui propose les fonctions classiques : • point d'arrêt (breakpoint) • pile d'appels (call stack) • inspecteur de variable (espion, aussi appelé watch) • exécution pas à pas : step into, step over, step out, pause
Editeur 2) On lance le programme Python. 1) On tape les lignes de code du programme Python.
3) On observe l’exécution du programme Python
Interpréteur
Page 2 / 8
TS-Spécialité ISN
Thème : Langages et programmation
David LATOUCHE
4 Le hasard dans PYTHON Dans beaucoup de jeux, le hasard a une place plus ou moins importante. Un jeu de hasard est un jeu dont le déroulement est partiellement ou totalement soumis à la chance. Celle-ci peut provenir d'un tirage ou d'une distribution de cartes, d'un jet de dé, etc. Lorsque le jeu est totalement soumis au hasard, on parle de jeu de hasard pur. Lorsque le joueur doit déterminer son action en fonction d'événements aléatoires passés ou futurs et de probabilités, on parle plus volontiers de jeu de hasard raisonné.
4.1. Le module random Le langage Python dispose d'un module random, qui contient plusieurs fonctions qui nous seront utiles pour générer du hasard, par exemple simuler le jet d'un dé, mélanger des cartes, tirer une carte au sort, etc. Il est temps d'écrire notre premier programme en Python. Traditionnellement, il est d'usage d'écrire « Hello world ! » à l'écran. print("Hello world !") Nous
allons maintenant utiliser le module random. Pour cela, il faut d'abord l'importer :
from random import *
L'étoile indique que l'on importe toutes les fonctions que contient le module. On peut aussi énumérer les fonctions qu'il nous faut, par exemple s'il ne nous en faut qu'une : from random import randint La documentation complète de ce module est disponible dans la documentation officielle Python, à l'adresse : http://docs.python.org/3.3/library/random.html
4.2. random() Parmi les fonctions du module random, la plus simple s'appelle... random(). Remarquez les parenthèses ! Cette fonction retourne un nombre réel entre 0 (compris) et 1 (non compris). L'exécution de ce programme produira un résultat différent à chaque fois : from random import random print(random())
4.3. randint() La fonction randint(a,b) retourne un nombre entier entre a et b (bornes comprises). On peut ainsi facilement simuler le jet d'un dé : from random import randint print(randint(1,6))
4.4. La boucle for … in … Il est fastidieux de toujours relancer le programme pour faire un lancer de dé. On peut faire 100 lancers avec une boucle : from random import randint for i in range(100): print(randint(1,6), end=" ") La
variable i sert juste à compter de 0 à 99. Page 3 / 8
TS-Spécialité ISN
Thème : Langages et programmation
David LATOUCHE
Remarquez bien le décalage vers la droite de la ligne print(...). En Python, contrairement aux autres langages de programmation les plus courants, cette indentation n'est pas seulement esthétique, cela fait partie de la syntaxe ! Si ce bloc n'est pas indenté, une fenêtre avec le message « expected an indented block » apparaîtra. L'instruction end=" " permet de séparer les valeurs par un espace plutôt que par un saut de ligne. On aurait pu séparer les valeurs par autre chose, une virgule par exemple : end=",". Essayez !
BOUCLE FOR :
RETENIR
for élément in séquence: Bloc d’instructions Suite du programme
Défi programmeur n° 1 Q1. Écrivez un programme qui simule le jet de trois dés à six faces (on additionne le résultat des trois dés). Q2. Écrivez un programme qui simule 50 jets de trois dés à six faces.
4.5. Entrée (input), sortie (print) et variable On peut demander au joueur le nombre « n » de lancers du dé unique qu’il souhaite réaliser : from random import randint n=int(input(“Entrez un nombre de lancers entre 1 et 100 : ”)) for i in range(n): print(randint(1,6), end=" ") La
fonction
standard
input()
interrompt
le
programme
et
attend
que
le
joueur
entre
une
donnée
et
la valide.
La
fonction
print()
est
indispensable
pour
l’affichage
des
résultats.
La fonction int() permet de convertir la réponse du joueur en un entier. En effet, par défaut, la fonction input() récupère une chaîne de caractères alphanumériques. Sans int() le variable n serait du type str (string) et non pas de type int (integer) nécessaire à l’exécution de la boucle for.
4.6. choice() En Python, on peut créer et utiliser des listes (de lettres, de mots, de chiffres, ...). Il suffit de mettre les éléments entre crochets : liste = ['a','b','c','d','e','f','g','h'] La fonction choice(liste) permet de tirer au sort un de ces éléments : from random import choice liste = ['a','b','c','d','e','f','g','h'] print(choice(liste))
Remarque : Dans une liste, les caractères doivent être mis en guillemets ou entre apostrophes. Ce n'est pas nécessaire avec les nombres.
Page 4 / 8
TS-Spécialité ISN
Thème : Langages et programmation
David LATOUCHE
Défi programmeur n° 2 Q1. Trouvez un moyen de simuler un dé pipé à six faces : • 1 apparaît dans 10% des cas, • 2, 3, 4 et 5 dans 15% des cas • 6 dans 30% des cas Écrivez un programme qui simule 100 jets de ce dé. Q2. Écrivez un programme que génère un mot de passe de 8 caractères aléatoires, choisis parmi les 26 lettres minuscules et les 10 chiffres. 4.7. Shuffle() La fonction shuffle(liste) mélange les éléments d'une liste. Idéal pour mélanger un paquet de cartes ! from random import shuffle liste = ['a','b','c','d','e','f','g','h'] shuffle(liste) print(liste)
Défi programmeur n° 3 Le Royal Rumble est une bataille royale exposant 30 catcheurs durant un combat. La particularité du match est que les catcheurs ne sont que deux au départ et qu'un nouvel entrant arrive au bout d'un temps prédéfini, et ceci de façon régulière jusqu'à ce que tous les participants aient fait leur entrée. Écrivez un programme qui donnera un ordre d'entrée aléatoire des catcheurs, dont voici la liste : Wade Barrett, Daniel Bryan, Sin Cara, John Cena, Antonio Cesaro, Brodus Clay, Bo Dallas, The Godfather, Goldust, Kane, The Great Khali, Chris Jericho, Kofi Kingston, Jinder Mahal, Santino Marella, Drew McIntyre, The Miz, Rey Mysterio, Titus O'Neil, Randy Orton, David Otunga, Cody Rhodes, Ryback, Zack Ryder, Damien Sandow, Heath Slater, Sheamus, Tensai, Darren Young, Dolph Ziggler.
4.8. Sample() La fonction sample(liste,k) tire au sort k éléments d'une liste. from random import sample liste = ['a','b','c','d','e','f','g','h'] print(sample(liste,3)) Remarque : contrairement à shuffle(), la liste n'a pas été modifiée par sample() ! Défi programmeur n° 4 Q1. Écrivez un programme qui simule un tirage Euro Millions : cinq numéros tirés au sort entre 1 et 50, suivi deux étoiles numérotées de 1 à 11. Exemple :
Q2. Le Bingo est un jeu de société où les nombres tirés au sort sont annoncés les uns à la suite des autres, dans un ordre aléatoire. Supposons que les boules soient numérotées de 1 à 90. Simulez une partie de bingo. Autrement dit, il faut mélanger les boules. Aide : L'instruction numéros = list(range(a,b)) crée la liste des entiers entre a (compris) et b (non compris). Page 5 / 8
TS-Spécialité ISN
Thème : Langages et programmation
David LATOUCHE
4.9. Les conditions if...elif... else... Imaginons que l'on veuille simuler un dé pipé à six faces, comme dans le « défi programmeur n° 2 », mais avec les probabilités suivantes : • 1 apparaît dans 12.52% des cas • 2 apparaît dans 13.09% des cas • 3 apparaît dans 21.57% des cas • 4 apparaît dans 19.87% des cas • 5 apparaît dans 11.23% des cas • 6 apparaît dans 21.72% des cas Comme la somme des probabilités doit faire 100%, c'est-à-dire 1, on va pouvoir utiliser random() avec une série de conditions si... sinon si... sinon si... sinon... (en Python if...elif... elif... else...). L'idée est de découper l'intervalle [0, 1[ en 6 sous-intervalles de différentes largeurs. Si random() est plus petit que 0.1252 (12.52%), alors on écrira 1. Si random() est compris entre 0.1252 et 0.2561 (0.1252+0.1309), alors on écrira 2. Et ainsi de suite… from random import random rnd = random() if rnd < 0.1252: print(1) elif rnd < 0.2561: print(2) elif rnd < 0.4718: print(3) elif rnd < 0.6705: print(4) elif rnd < 0.7828: print(5) else: print(6)
Remarquez bien le décalage (indentation) du texte du programme. On a utilisé une variable rnd dans laquelle on a stocké le résultat de la fonction random(). On a n'avait pas le choix, puisque chaque fois que l'on appelle random(), on obtient un résultat différent. Pour comparer des valeurs, on dispose des opérateurs suivants :
Notez bien la différence entre a=1, qui est une affectation (c'est-à-dire que l'on donne la valeur 1 à la variable a, et a==1 qui est une comparaison (on teste si la valeur de a est égale à 1). Il n'y a que deux valeurs possibles pour le résultat d'une comparaison : True (vrai) ou False (faux) : ce sont des valeurs booléennes. Attention aux majuscules !
Page 6 / 8
TS-Spécialité ISN
Thème : Langages et programmation
David LATOUCHE
Défi programmeur n° 5 Q1. Simulez 100 jets d'une pièce truquée qui, en moyenne, montre face dans 57.83% des cas. Q2. Les cinq solides platoniciens peuvent être utilisés comme dés réguliers, car toutes leurs faces sont identiques.
On veut générer un nombre aléatoire de la manière suivante : 1. on lance le tétraèdre pour choisir lequel des quatre autres dés on va utiliser ; 2. on lance ce dé et on écrit le résultat. Générez 100 nombres aléatoires en suivant ce protocole.
Ce que vous avez appris dans cette activité Le « vrai » hasard n'existe pas en informatique. On génère une suite de nombres qui a l'apparence du hasard (nombres pseudo-aléatoires). C'est dans le module externe random que se trouvent les fonctions permettant de simuler le hasard. Vous savez écrire des choses à l'écran avec la fonction print(). Vous savez demander une valeur à l’utilisateur avec la fonction input(). Vous avez découvert trois concepts fondamentaux des langages de programmation, dont nous reparlerons plus en détails dans la prochaine activité : les boucles les variables la condition si... sinon Vous savez comment définir une liste. Une prochaine activité sera essentiellement consacrée à cette structure de données. Vous connaissez tous les opérateurs de comparaison. Attention, en particulier, à ne pas confondre = et ==. C'est une erreur fréquente.
Page 7 / 8
TS-Spécialité ISN
Thème : Langages et programmation
David LATOUCHE
Lycée Saint-Exupéry Mantes-la-Jolie
David LATOUCHE Page 8 / 8