Python au lycée

Cette page sert ou a servi de de fil conducteur aux stages de Strasbourg puis Colmar (2009-2010)

Elle renvoie vers les pages suivantes:

  1. Algorithmique et Python en seconde
  2. Dix exercices pour de niveaux variés
  3. Un problème de proba non trivial
  4. Tortue Logo (utilisation du module turtle)
  5. Simulation de sondages avec Python (utilisation de pylab)
Le retour se fait en cliquant sur l'onglet

Déroulement du stage

  1. Présentation du langage Python
  2. Utilisation d'un éditeur de texte spécialisé
  3. Un exemple d'algorithme naturel et sa traduction en Python
  4. Les commandes les plus utiles
  5. création de fonctions
  6. techniques: permutation de variables, drapeau
  7. rappels pour faire des simulations
  8. utilisation de la tortue logo
  9. beaucoup d'exercices

Documentation

  1. Le site central
  2. L'inévitable cours de Gérard Swinnen
  3. Un site très bien fait pour les débutants

L'aspect du code

Avec l'éditeur de texte DrPython

Briques

Quelques tâches élémentaires : Télécharger la présentation de commandes
  1. Bases
    1. affecter une valeur à une variable,
    2. 
      a=15                #entier
      e=15.0              #flottant
      b=[a,a+1,a+2]    #liste     
      a=a+5                   
      c=(17 in b)         #booleen
      d="bonjour monde !" #chaine de caractere
      

      tester le code suivant

      
      a=12
      b=15
      a=b
      b=a
      print a
      print b
      
    3. créer une boucle
    4. #somme des entiers de 0 à 9
      b=0
      for a in range(10):
          b=b+a
      print b
      #sommes cumulees des entiers de 1 à 10
      b=0
      for a in range(1,11):
          b=b+a	
          print b
      #somme des carres des elements d'une liste
      b=0
      c=[14,18,32,45]
      for e in c:
          b=b+e**2
      print b
      
      #repetition d'actions
      for i in range(5):
          print "tic"
      
    5. Tant que
    6. 
      n=0
      i=0
      while n<10000:
          i=i+1            #compteur
          n=n+i**2       #cumul
      print n
      print i  
      
    7. faire un test
    8. 
      a=31608
      if a%13==5 :
          print "a est de la forme 13n+5"
      else:
          print "a n'est pas de la forme 13n+5"
          
      a=17
      if a%3==0:
          print " de la forme 3n"
      elif a%3==1:
          print " de la forme 3n+1"
      else:
          print " de la forme 3n+2"
      

    Une suite de syracuse est définie par u0=a et un+1 est égal à an/2 si an est pair et à 3an+1 si an est impair. On appelle temps de vol d'une telle suite le plus petit indice p tel que up=1.

    Faire un programme qui quand on donne une variable a calcule le terme qui suit a dans une suite de Syracuse.

    Faire un programme qui calcule le temps de vol pour la suite de Syracuse de premier terme 5

  2. Travailler avec des listes
    1. créer une liste
    2. 
      l=[]                            #liste vide
      for i in range(10):
          l.append(2**i)
      print l
      
      print l[0]                     #le premier terme a pour indice 0
      print len(l)
      print l[-1]                   #le dernier terme
      

      Donner la liste des termes de la suite de syracuse de premier terme 5 pendant son temps de vol.

    3. liste en compréhension
    4. 
      u=[x**2 for x in range(12)]
      
      v=[x**2+y**2 for x in range(5) for y in range(5)]
      
      w=[x**2+y**2 for x in range(5) for y in range(5) if x**2+y**2<=19]
      
      z=[x for x in range(20) if x not in w]
      
      t=[[x,y] for x in range(5) for y in range(5)]   #produit cartesien
      
    5. exploiter des listes
    6. 
      u=[5,4,2,3,1,2,6,2,4,3,5,4,4]
      v=u.count(5)
      w=[u.count(i) for i in range(1,7)]
      u.sort()
      u.remove(4)
      m=max(u)
      n=sum(w)
      
  3. Travailler avec des chaînes
    1. problèmes d'encodage
    2. Si on veut utiliser des caractères non ASCII, il faut savoir quel encodage notre éditeur de texte utilise c'est en général utf-8 ou latin-1 . On commencera donc chaque script par une ligne du genre -*- coding:Utf-8 -*- ou -*- coding:Latin-1 -*-

      
      #-*- coding:Utf-8 -*-
      
      #On peut écrire des accents 
      #dans les commentaires sans s'énerver
      
    3. manipulation de chaînes
    4. 				
      c="chaine"
      print len(c)
      print c.replace("ch","pl")
      c=c+"s"
      
    5. Formater une chaîne de caractères
    6. 
      a=123.485757
      b=17
      
      print "On trouve a=%f et b=%d"   %(a,b)
      print "On trouve a=%.2f " %(a)
      print "On trouve a=%e \n et b=%d "  %(a,b)
      
  4. Utiliser un module
    1. fonctions mathématiques
    2. On appelle le module math

      
      #-*- coding:Utf-8 -*-
      from math import *
      #ne pas utiliser la variable e
      a=17
      b=sqrt(a)
      c=floor(b)
      d=pi+e
      f=exp(2)+log(3)
      g=cos(pi/3)
      
    3. simuler le hasard
    4. On appelle le module random

      
      #-*- coding:Utf-8 -*-
      from math import *
      from random import *
      
      de=1+int(floor(6*random()))
      tetra=randint(1,4)
      #liste de nombres aléatoires
      l=[randint(1,6) for i in range(100)]
      

      Qu'est-ce qui ne va pas dans le code suivant? Proposer une correction.

      
      from random import *
      l=[random() for i in range(10) if random()<0.3]
      print l
      
    5. Utiliser la tortue
    6. Voir cette page et essayer de faire un script permettant de dessiner l'une des étapes de la construction de la courbe de Peano

      Faire un script simulant une promenade aléatoire dans le plan en 1000 étapes; à chaque étape, on se déplace de façon équiprobable vers le sud, le nord, l'est ou l'ouest.

  5. Entrées sorties
    1. récupérer une réponse
    2. 
      print "ecris un nombre"
      a=input()
      print "son carre est",a**2
      
      ou
      
      print "ecris un nombre naturel"
      b=raw_input()
      print "son carre est",int(b)**2
      
    3. lire un fichier
    4. 
      dec = open("fichier.txt","r")
      #lecture du ficier
      b=dec.read()
      dec.close()
      
    5. créer un fichier et écrire dedans
    6. 
      b="texte"
      #ecriture dans un fichier
      dec = open("fichier.txt","w")
      dec.write(b)
      dec.close()
      

On essaye

Trouver tous les entiers n à trois chiffres tels que n soit égal à la somme des cubes de ses chiffres

Simuler mille lancer de dés et donner l'effectif correspondant à la sortie de chaque face.

Un basketteur a droit à deux lancers francs. La probabilité de réussir son premier lancer est de 0,6 (six chances sur 10). Si il a réussi son premier lancer, il a plus confiance en lui et dans ce cas, la probabilité de réussir son deuxième panier est de 0,8. Si il échoue au premier lancer, il se déconcentre et sa probabilité de réussite du deuxième lancer est de 0,3. Simuler cette épreuve 10 000 000 de fois et conjecturer la probabilité qu'il réussisse un seul lancer sur les deux.

Donner la liste des nombres premiers inférieurs à 1000 en utilisant le crible d'Ératosthène

Dans un pays imaginaire, la probabilité qu'un citoyen pris au hasard vote oui à un référendum est 0,48. On va simuler l'organisation de 500 sondages sur un échantillon de 1000 personnes puis 500 sondages sur un échantillon de 5000 personnes. On appelle sondage trompeur un sondage qui recueille un nombre d'intentions de votes pour le oui strictement majoritaire. Par combien divise-t-on approximativement le nombre de sondages trompeurs quand on passe d'un échantillon de 1000 à un échantillon de 4000?

Encore

  1. Regarder cette page
  2. Faire les exercices 4, 6 et 7 de cette page

fait le 19 novembre 2009 et le 18 janvier 2010