Compléments sur Python (EduPython) Formation Lycée Juillet 2018
Pourquoi le choix de Python Le choix d’un langage textuel, comme Python, au lieu d’un langage par blocs, comme Scratch, permet aux élèves de se confronter à la précision et la rigidité d’une syntaxe proche de celle des expressions mathématiques, avec l’avantage de pouvoir bénéficier du contrôle apporté par l’analyseur syntaxique. (Document ressources pour le lycée)
Bibliothèque « lycee » d’EduPython Lien vers le fichier Lycee.py 67 fonctions sont définies Quelques exemples : Est chargé par la commande from lycee import * def pgcd(a,b): Renvoie le Plus Grand Diviseur Commun des 2 nombres def puissance(a,n): Cette fonction renvoie le résultat de a^n def reste(a,b): Cette fonction renvoie le reste de la division de a par b def quotient(a,b): Cette fonction renvoie le quotient de la division de a par b
Bibliothèques « math » et « cmath » Il suffit d’importer au début de votre programme ce module par l’une des instructions d’importation : import math : nécessite alors d’appeler la fonction par math.sqrt(2) par exemple pour la racine carrée de 2. from math import sqrt : permet d’appeler la fonction directement par sqrt(2) par exemple pour la racine carrée de 2. from math import * : permet d’importer directement toutes les fonctions du module math, il n’est alors plus nécessaire de les précéder de math.
Quelques fonctions pour les statistiques L=[random.randint(1,50) for i in range(100)] Python propose une syntaxe utile pour la création de liste en compréhension.
Quelques fonctions pour les statistiques L=[random.randint(1,50) for i in range(100)]
Précision de Python ! Si vous tapez print (3 − 2.99 − 0.01), vous obtiendrez le résultat −2.13370987545e − 16 ce qui peut poser problème... Cela vient de la représentation des nombres dans la machine : la représentation des nombres décimaux se fait selon la norme IEEE 754 et on obtient la même erreur avec beaucoup de logiciels (Excel, OpenOffice, XCas, ...). En fait pour nous le nombre 2,99 est un nombre "simple" dans son écriture décimale, mais pour un ordinateur qui pense en base 2, c’est beaucoup plus difficile ! Plus d’information sur la documentation officielle de Python
A propos de la représentation des nombres dans Python Donc 0.1 n’est pas 0.1 mais 0.1000000000000000055511151231257827021181583404541015625 Cela vient du fait du stockage des flottants en binaire.
Les nombres à virgule flottante sont représentés, au niveau matériel, en fractions de nombres binaires (base 2). Par exemple, la fraction décimale : 0,125 = 1/10 +1/100+5/1000 Et, de la même manière, la fraction binaire : 0.001=0/2+0/4+0/8 Ces deux fractions ont une valeur identique, la seule différence est que la première est une fraction décimale, la seconde est une fraction binaire. Malheureusement, la plupart des fractions décimales ne peuvent pas avoir de représentation exacte en fractions binaires. Par conséquent, en général, les nombres à virgule flottante que vous donnez sont seulement approximés en fractions binaires pour être stockés dans la machine. Python à 53 décimales binaires ( les 53 bits de mantisse en flottant-64 bits.)
Problème d’arrondi Pour calculer en binaire 1/10, il faut donc faire 1/1010. On trouve : N = 0.000 11 00 11 00 11 00….(périodique) 0.1 est donc stocké sous la forme de N « coupé » à 53 décimales >>> (0.1+0.1==0.2) True 0.1 0.00011001100110011001100110011001100110011001100110011 +0.1 0.00011001100110011001100110011001100110011001100110011 -------------------------------------------------------------------------------------------------- 0.2 0.00110011001100110011001100110011001100110011001100110 0.3 0.01011001100110011001100110011001100110011001100110011 >>> (0.1+0.1+0.1==0.3) False
Problème d’arrondi