Rien n'est plus semblable à l'identique que ce qui est pareil à la même chose.
Pierre Dac (sur mon T shirt!)
Instructions: Prog 1 Avance de 1 pas Répète tout 5 fois Inconvénient : On rigole quand l'élève est trop près du tableau ! Prog 2 Regarde devant Si tu peux avancer d'un pas alors : Avance de 1 pas Répète tout 5 fois
Ainsi, on peut voir un algorithme comme une suite d'instructions répétitives en interaction avec le monde extérieur.
Au collège le MSI (programme destiné à l'installation sous Windows) est disponible sur le réseau dans P:\Math\Python. L'élève l'installe sur son poste, pour tous les utilisateurs (for all users). L'installation est aisée et rapide (next-next-next)
A noter : https://www.python.org/downloads/ est l adresse de téléchargement officiel.
L IDLE est (entre autres) une super calculatrice :
On peut remarquer que Python dans sa grande sagesse, respecte les priorités opératoires. Un avantage de ce super calculateur sur une calculatrice traditionnelle est la possibilité pour l'utilisateur de relire ses calculs, et de voir sur le même écran tous les résultats affichés simultanément.
Sur une calculatrice on peut faire 10+5 EXE et elle affiche 15, puis faire *2 EXE et elle affiche 30, ça ne marche pas sous Python !!!
En utilisant l’opérateur « _ » (tiret du 8) :
Python ne comprend pas tout ! Rien ne sert de lui dire bonjour !
bonjour n’est pas défini : On va comprendre ce que cela veut dire !
Dans l'IDLE je demande aux élève de taper "exactement": prenom="Laurent" (En remplaçant Laurent par leur propre prénom !) Et d'appuyer sur ENTREE. La réponse de Python est étonnante pour les élèves : >>> Il ne se passe rien !
Que s'est-il donc passé ? Nous avons créé une variable prenom (sans majuscule, sans accent) qui peut être vue comme une boite en carton dans laquelle nous avons instantanément rangé quelque chose : une chaine de caractères (string).
Dans l'IDLE je demande alors aux élève de taper "exactement": print(10*prenom) Et avant d'appuyer sur ENTREE de tenter de deviner ce qui va se passer.
« \n » est un caractère non imprimable (qui ne s’affiche pas à l’écran) mais qui initie un passage à la ligne.
Je profite du mini chahut généré par cette dernière activité pour mimer une petite colère :<:p>
Vous me copierez 1000 fois : "Je ne dois pas parler en classe !" Hum … Oui vous pouvez utiliser Python !
print(1000*"je ne dois pas parler en classe !")
Ou, plus joli :
print(1000*"je ne dois pas parler en classe ! \n")
Dans l’IDLE je crée une variable mot : mot= « anticonstitutionnellement » et j’essaye successivement :
mot[2] ? affichage « t »
mot[5] ? affichage « o »
Afficher avec cette syntaxe la lettre i puis la lettre a
Ce qu’il faut comprendre c’est que pour Python la syntaxe mot[x] renvoie la lettre d’indice x, et que le premier indice est …zéro !
Lettre | a | n | t | i | c | o | n | s | ... |
Indice | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | ... |
2 J’essaye maintenant :
mot[2 : 5] ? affichage « tic »
et j’invite les élèves avec la même syntaxe à essayer d’afficher « cons »
La syntaxe mot[2 : 5] affiche les lettres d’indices 2 à 4 (lettre d’indice 5 : première lettre non affichée)
D’où : mot[4 : 8] ? affichage «cons »7
3 J’essaye maintenant :
mot[1 : 7 : 2] ? affichage «nio»
mot[1:7:-2] ? affichage «»
mot[7:1:-2] ? affichage «soi»
Que signifie ce troisième nombre ?
Certaines valeurs peuvent être omises, essayez mot [5 :] mot[ :5] et mot[ ::-1] !
Au cycle 4, les élèves s'initient à la programmation, en développant dans une démarche de projet quelques programmes simples, sans viser une connaissance experte et exhaustive d'un langage ou d'un logiciel particulier. En créant un programme, ils développent des méthodes de programmation, revisitent les notions de variables et de fonctions sous une forme différente, et s'entraînent au raisonnement.
Décomposer un problème en sous-problèmes afin de structurer un programme ; reconnaître des schémas. Écrire, mettre au point (tester, corriger) et exécuter un programme en réponse à un problème donné. Écrire un programme dans lequel des actions sont déclenchées par des événements extérieurs. Programmer des scripts se déroulant en parallèle. - Notions d'algorithme et de programme. - Notion de variable informatique. - Déclenchement d'une action par un événement, séquences d'instructions, boucles, instructions conditionnelles.
Jeux dans un labyrinthe, jeu de Pong, bataille navale, jeu de nim, tic tac toe. Réalisation de figure à l'aide d'un logiciel de programmation pour consolider les notions de longueur et d'angle. Initiation au chiffrement (Morse, chiffre de César, code ASCII...). Construction de tables de conjugaison, de pluriels, jeu du cadavre exquis... Calculs simples de calendrier. Calculs de répertoire (recherche, recherche inversée...). Calculs de fréquences d'apparition de chaque lettre dans un texte pour distinguer sa langue d'origine : français, anglais, italien, etc.
En 5e, les élèves s'initient à la programmation événementielle. Progressivement, ils développent de nouvelles compétences, en programmant des actions en parallèle, en utilisant la notion de variable informatique, en découvrant les boucles et les instructions conditionnelles qui complètent les structures de contrôle liées aux événements.
Blue-Bot est un robot autonome spécialement conçu pour une utilisation scolaire. Le robot : 125,00 €Pack 6 robots + station d'accueil : 759,00 €
J'ai proposé à mes élèves de troisième, dans le devoir 12 de cette année scolaire (2024-2025) l’exercice suivant :
Exercice 2 (L’ utilisation d’un tableur est recommandée)
On donne le jeu suivant :
« Chacun des deux joueurs tire au hasard un nombre entier entre 1 et 100. Si les deux nombres
sont premiers entre eux, c’est le joueur A qui gagne, sinon, c’est le joueur B qui gagne. »
Le jeu est-il équitable ?
Mes objectifs pour cet exercice étaient nombreux :
On dit que deux nombres a et b sont premiers entre eux lorsque leur plus grand diviseur commun est égal à 1.
L'erreur la plus fréquente dans les copies corrigées est assez classique : beaucoup d'élèves confondent "nombres premiers" (des nombres divisibles uniquement par 1 et eux-mêmes) et "nombres premiers entre eux" (voir la définition dans l'encadré ci-dessus).
Bien évidemment, deux nombres premiers sont toujours premiers entre eux, mais la réciproque est fausse : deux nombres peuvent être premiers entre eux sans être premiers.
Par exemple, 24 et 35 ne sont pas premiers (24 = 2 × 2 × 2 × 3 et 35 = 5 × 7), mais leur PGCD est 1, donc ils sont premiers entre eux.
Plusieurs élèves ont affirmé que le joueur A était avantagé parce que le nombre 1 est "premier avec tous les autres". L'intuition n'est pas totalement fausse, mais la formulation manque de rigueur, et surtout, elle ne suffit pas à conclure sur l’équité du jeu.
Il est vrai que le PGCD de 1 et n’importe quel autre nombre est toujours 1, donc si l’un des deux joueurs tire le nombre 1, le couple sera automatiquement premier entre eux, et A gagnera. Cela ajoute effectivement des cas favorables à A. Mais cela ne veut pas dire pour autant que le jeu est inéquitable uniquement à cause de ce cas particulier.
En réalité, pour savoir si le jeu est équitable, il faut compter précisément le nombre total de paires (a, b) avec a et b choisis entre 1 et 100, et déterminer dans combien de ces cas le PGCD(a, b) = 1. Ce n’est qu’en calculant la proportion de couples premiers entre eux qu’on peut trancher.
L’ utilisation d’un tableur est recommandée
C'est un travail conséquent qui nécessite des connaissance sur le tableur :
Remplir automatiquement des plages de cellules
(#128073#) Utiliser la poignée de recopie pour générer les nombres de 1 à 100 en ligne ou en colonne.
✅ Compétence de base pour structurer les données.
Créer un tableau à double entrée
(#128073#) Générer toutes les paires possibles (a, b) avec 1 ≤ a ≤ 100 et 1 ≤ b ≤ 100.
✅ Permet de représenter toutes les situations possibles du jeu.
Utiliser la fonction PGCD()
ou GCD()
(#128073#) Pour chaque couple (a, b), calculer le PGCD.
✅ Fonction centrale pour savoir si les deux nombres sont premiers entre eux (PGCD = 1).
Utiliser une fonction conditionnelle (SI
, IF
)
(#128073#) Par exemple : =SI(PGCD(A1;B1)=1;1;0)
pour compter les cas favorables à A.
✅ Utile pour automatiser le décompte des cas gagnants.
Compter avec NB.SI()
ou SOMME()
(#128073#) Calculer le nombre total de cas favorables à A, et à B.
✅ Nécessaire pour comparer les proportions et juger de l’équité.
Calculer une proportion ou un pourcentage
(#128073#) Par exemple : =Nombre_de_cas_pour_A / Total_des_cas
✅ Permet d’estimer la probabilité de victoire de A.
Mise en forme conditionnelle (facultative)
(#128073#) Colorer en vert les cellules où A gagne, en rouge celles où B gagne.
✅ Offre une lecture visuelle intuitive des résultats.
Créer un graphique (facultatif)
(#128073#) Diagramme en secteurs ou histogramme pour visualiser les parts de victoire.
✅ Favorise la compréhension des résultats par l’élève.
https://docs.google.com/spreadsheets/d/1xtw31iyetEezuk22H38nG_FMAwc1xv42RtPDuKV-kU4/edit?usp=sharing
Ce jeu n’est pas équitable.
Deux nombres entiers tirés au hasard entre 1 et 100 sont premiers entre eux s’ils n’ont pas de diviseur commun autre que 1, c’est-à-dire si leur PGCD vaut 1.
Il est connu en théorie des nombres que la probabilité que deux entiers choisis au hasard soient premiers entre eux est d’environ :
6 / π² ≈ 0,6079, soit 60,8 %.
Ainsi :
Même si ici les nombres sont limités de 1 à 100, cette probabilité reste proche de cette valeur. Le joueur A est donc avantagé.
Conclusion : le jeu n’est pas équitable.
Cette probabilité est issue d’un raisonnement en théorie des nombres et fait intervenir la fonction zêta de Riemann. La démonstration fait appel à :
La démonstration complète est un beau résultat de mathématiques pures, que l’on rencontre typiquement en licence ou début de master en mathématiques. Elle mêle analyse et arithmétique.
On est donc loin des attendus de troisième !
Partager une passion est un privilège. Je développe en Python depuis Python 1.0 dans les années 90 et j'évoque ce langage souvent en classe. Par l’intermédiaire du bac à sable Python disponible sur le site2wouf.fr je montre qu'on peut, avec l'aide de Python et éventuellement d'une IA :
Ainsi quand on a évoqué les algorithmes de recherche du pgcd, j'ai donné cette fonction :
def pgcd(a, b): # Échange si nécessaire pour que a ≥ b if a < b: a, b = b, a # Algorithme d'Euclide while b: a, b = b, a % b return a
N'hésitez pas à copier-coller dans le bac à sable !
from random import * nb_max=100 score1=0 score2=0 def pgcd(a, b): # Échange si nécessaire pour que a ≥ b if a < b: a, b = b, a # Algorithme d'Euclide while b: a, b = b, a % b return a #----------------------------------------------------- def jouer(): #les scores des joueurs sont des variables globales: global score1,score2 j1,j2=randint(1,nb_max),randint(1,nb_max) print("joueur 1 :",j1," joueur 2 :",j2) if pgcd(j1,j2)==1: score1+=1 else: score2+=1 #--------------------------------------------------- for i in range(10): #on simule 10 parties jouer() if score1<score2: print("Le joueur 2 a gagné !") elif score1==score2: print("Egalité !") else: print("Le joueur 1 a gagné !")
N'hésitez pas à copier-coller dans le bac à sable !
En répétant plusieurs fois l'exécution du script on a l'intuition que le joueur A gagne plus souvent que le joueur B. Mais ce n'est qu'une intuition.
Plus besoin de hasard, on va tester tous les couples (sans rien afficher, il y en a 100x100=10 000) et livrer les résultats au sortir de la boucle :
score1=0 score2=0 def pgcd(a, b): # Échange si nécessaire pour que a ≥ b if a < b: a, b = b, a # Algorithme d'Euclide while b: a, b = b, a % b return a #----------------------------------------------------- def jouer(j1,j2): #les scores des joueurs sont des variables globales: global score1,score2 if pgcd(j1,j2)==1: score1+=1 else: score2+=1 #--------------------------------------------------- for x in range(100): for y in range(100): #x et y varient entre 0 et 99 jouer(x+1,y+1) #c'est pourquoi on ajoute 1 print("Les scores :",score1,score2) print(score1/100,"% - ",score2/100,"%") if score1<score2: print("Le joueur 2 a plus de chance de gagner !") elif score1==score2: print("Le jeu est équitable") else: print("Le joueur 1 plus de chance de gagner !")
N'hésitez pas à copier-coller dans le bac à sable !
Nous avons le résultat en une fraction de seconde !
lien vers l'article sur wouf blogAllhtml est plus qu'un site, c'est une communauté de passionnés en développement web.
Sur le site de Wouf, AllHtml est accéssible en cliquant sur liens puis "plus"