Reprise pour proof of concept du pdf PythonEdu Amiens

Passer par un logiciel Windows alors que jupyter et jupyterhub existent me semble une grossière erreur d'aiguillage.

Je vais tenter de démontrer mon point de vue à partir de ce Notebook. Les librairies utilisées par le module lycee sont instalées en python3 sur la raspberryPi du projet Tremplin.

Il va de soi que ce cahier peut s'exécuter en local sur toute machine disposant d'une instalation de jupyter notebook.

L'écriture du code en Python : des règles à respecter

l'indentation et les commentaires

La position du premier caractère d'une ligne de code obéit à une règle simple :

Une ligne de code commence au début d'une ligne sauf si ":" terminent la ligne précédente. Dans ce cas un décalage est nécessaire, il s'agit d'une indentation.

Le nombre d'espaces est paramétrable dans les éditeurs de code python mais généralement il s'agit d'une tabulation.

Les commentaires sont insérés à la suite d'un #

Les codes des champs suivants illustrent ce propos.

remarque : L'invite de saisie input() est utilisée dans sa version "importer un entier" int(input()).


In [1]:
#solution de l'équation ax = b pour a = 2 et b = 6
a=2
b=6
print("la solution solution de ",a,"* x = ",b,"est :") 
print("x =",b/a)


la solution solution de  2 * x =  6 est :
x = 3.0

In [2]:
#résoudre l'équation ax=b pour a≠0
a = int(input("entrez une valeur pour a ≠ 0 : "))
#on s'assure que a est bien différent de 0
if a==0: 
    #on redemande la saisie de a
    a = int(input("Attention entrez une valeur pour a ≠ 0 :  "))
    #tant que a vaut 0 
    while a==0:
        #on demande une valuer différente de 0
        a = int(input("Attention entrez une valeur pour a ≠ 0 :  "))
    #dès que a est différent de 0 
    else:
        #on demande la saisie de b
        b = int(input("entrez une valeur pour b : "))
        # on affiche le résultat
        print("la solution solution de ",a,"* x = ",b,"est :")  
        print("x =",b/a)
else:
    #quand a est différent de 0 on demande la saisie de b
    b = int(input("entrez une valeur pour b : "))
    print("la solution solution de ",a,"* x = ",b,"est :") 
    print("x =",b/a)


entrez une valeur pour a ≠ 0 : 2
entrez une valeur pour b : 6
la solution solution de  2 * x =  6 est :
x = 3.0

Exercice 1 : appliquer ses connaissances

Rédigez un programme qui vous donne la solution de l'équation

                       2ax + b = C

pour a≠0


In [ ]:
# Pensez à faire une copie de ce Cahier avant de rédiger "File …… "Make a Copy" "
# Renommez le cahier avec votre nom.
# Utilisez ce champ de saisie pour rédiger votre programme puis le tester.

la casse des caractères

Il est important de se souvenir que les instruction en python s'écrivent en minuscule.

Lorsque une variable contient des Majuscules il faut dans tout le programme conserver ces majuscules.

Les champs de code suivants montrent ce qui se produit quand on suit la règle puis lorsqu'on ne la suit pas.


In [26]:
# utilisation de la casse dans les variables
CoefficientDirecteur=2
ordonneeAlOrigine=6
print ("y =",CoefficientDirecteur,"x +", ordonneeAlOrigine)


y = 2 x + 6

In [17]:
# non respect de la casse dans un nom de variable
CoefficientDirecteur=2
ordonneeAlOrigine=6
print ("y=",Coefficientdirecteur,"x +", ordonneeAlorigine)


---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
<ipython-input-17-725d408d216e> in <module>()
      2 CoefficientDirecteur=2
      3 ordonneeAlOrigine=6
----> 4 print ("y=",Coefficientdirecteur,"x +", ordonneeAlorigine)

NameError: name 'Coefficientdirecteur' is not defined

L'affectation d'une valeur à une variable : utilisation du signe =

L'affectation peut se faire pour des entiers, des réels, des chaines de caractères

Le champ de code suivant montre l'unité de l'affectation quelque soit le type de données.


In [19]:
# affectation d'une chaine de caractère 
a="ceci est une chaîne de caractères"
print(a)
b='ceci est une chaîne de caractères'
print(b)
c="l'idée est de ne pas mélanger les guillemets et les apostrophes"
print(c)
d='"Bien mal acqui de profite jamais"'
print(d)
e=3.8
print(e)


ceci est une chaîne de caractères
ceci est une chaîne de caractères
l'idée est de ne pas mélanger les guillemets et les apostrophes
"Bien mal acqui de profite jamais"
3.8

Les variables peuvent être affectées par lot. On peut réaffecter les variables en même temps ou successivement.


In [24]:
#affection de a et b 
a,b=" ceci est une chaîne de caractères ",' ceci est une chaîne de caractères '
print(a,b)
f=a+b
print(f)
e,g=3,4
print(e," : ",g)
h,i=e+g,e-g
print(h," : ",i)


 ceci est une chaîne de caractères   ceci est une chaîne de caractères 
 ceci est une chaîne de caractères  ceci est une chaîne de caractères 
3  :  4
7  :  -1

De l'utilité du module lycee pour nos élèves ?

Le projet Pythonedu semble considérer qu'il faut mettre à disposition des élèves un module qui masque les fonctionnalités de python ... Il me semble en tant que prof validé ISN que cette démarche est contre productive.

Que fait lycee ?

Il est lié à des librairies python qui doivent être installées pour qu'il puisse fonctionner.

  • import math
  • import tkinter as Tk
  • import tkinter.filedialog as tkf
  • import random as alea
  • import matplotlib.pyplot as repere
  • import numpy as np
  • import builtins
  • from scipy.stats import norm

Puis il crée des fonctions qui sont pour le moins peu utiles ou en tout cas pas nécessaires pour un élève même débutant. Voyons deux exemples, avec lycee et sans lycee, qui pourraient être utilisés.

Pour les besoins de la démonstration lycee.py est placé dans le même dossier que ce notebook sur la raspberryPi de Tremplin.


In [25]:
from lycee import *


...module lycee actif....

In [2]:
# version utilisant lycee 
from lycee import *
x=demande('Entrez une valeur pour x = ')
y=demande('Entrez une valeur pour y = ')
x,y=x+y,x-y
print("x = ",x,"y = ",y)
x,y=x+y,x-y
print ("maintenant , x =",x,"et y =",y)


Entrez une valeur pour x = 1
Entrez une valeur pour y = 2
x =  3 y =  -1
maintenant , x = 2 et y = 4

In [4]:
# version utilisant python 
x = int(input("Entrez un entier x : "))
y = int(input("Entrez un entier y : "))
print("réaffectation de x ET y avec x,y = x+y,x-y ")
x,y=x+y,x-y
print("nouvelle valeur de x = ",x,"nouvelle valeur de y = ",y)
print("réaffectation de x ET y avec x,y = x+y,x-y") 
x,y=x+y,x-y
print("Maintenant la valeur de x = ",x," et la valeur de y = ",y)


Entrez un entier x : 4
Entrez un entier y : 6
réaffectation de x ET y avec x,y = x+y,x-y 
nouvelle valeur de x =  10 nouvelle valeur de y =  -2
réaffectation de x ET y avec x,y = x+y,x-y
Maintenant la valeur de x =  8  et la valeur de y =  12

On constate donc dans le premier cas que la démarche masque ce que fait le programme en privant l'élève d'un commentaire intermédiaire expliquant les réaffectation, et que la commande python est remplacée par une fonction qui au final n'a aucune utilité pour comprendre comment le programme fonctionne.

En ajoutant l'importation de time on peut même marquer des pauses qui permettent à l'élève de comprendre la séquence qui se produit dans le programme.


In [8]:
# version utilisant python 
import time
x = int(input("Entrez un entier x : "))
y = int(input("Entrez un entier y : "))
print("réaffectation de x ET y avec x,y = x+y,x-y ")
x,y=x+y,x-y
print("Calculez les valeurs attendue de x et y")
time.sleep(10)
print("nouvelle valeur de x = ",x,"nouvelle valeur de y = ",y)
time.sleep(10)
print("réaffectation de x ET y avec x,y = x+y,x-y") 
x,y=x+y,x-y
print("Calculez les valeurs attendue de x et y")
time.sleep(10)
print("Maintenant la valeur de x = ",x," et la valeur de y = ",y)


Entrez un entier x : 4
Entrez un entier y : 10
réaffectation de x ET y avec x,y = x+y,x-y 
Calculez les valeurs attendue de x et y
nouvelle valeur de x =  14 nouvelle valeur de y =  -6
réaffectation de x ET y avec x,y = x+y,x-y
Calculez les valeurs attendue de x et y
Maintenant la valeur de x =  8  et la valeur de y =  20

In [ ]: