Imprimer
Catégorie : Programmation Python - STAV
Affichages : 11457

Objectif

Support de cours présenté sur le premier trimestre 2020-2021 à destination des Terminales Générales du lycée sur demande des enseignants de Phys et Maths. Normalement dans le cadre d'HSE - demande en cours - 20h - obtenu 15h

Ne sachant pas où le déposer, je me dis qu'ici il pourra être consulté par des bac techno aussi.

Table des matières

1 - Sources inspirantes 
2 - Introduction 
3 - Présentation de l’IDE Thonny 
4 - Afficher des données dans le shell et parler à python 
5 - Stocker des données dans des variables 
6 - Calculer 
7 - Les séries de données – une liste pour vos mesures 
8 - Le test booléen – avec des si… 
9 - Boucle bornée - les tâches répétitives mais ayant une fin 
10 - Boucle non bornée – les tâches répétitives dont je ne connais pas le terme 
11 - Les fonctions – pour faire comme en maths 
12 - Présentation des bibliothèques – bienvenue dans l’Alexandrie du XXIème siècle 
13 - Import de données d’un fichier csv 
14 - Utilisation de fonctions en maths et calculs 
15 - Visualisation des données avec matplotlib 
16 - Faire de la physique avec scypi 


Physique - Décroissance radioactive

Source

Extrait d'un manuel de physique. Le script du doc 2 ne fonctionne pas mais il donne des idées

"Comprendre" le script (qui ne fonctionne pas ;)

Les problèmes de ce script sont:

L'esprit du programme semble être:

Des print() pour comprendre...

Soit 10 atomes radioactifs, pour faire simple et rapide.

import matplotlib.pyplot as plt
from random import randint
N=10
L=[]

while N>0:
    L.append(N)
    s=0
    print(N)# impression pour comprendre
    for i in range (N):
        print(i,s,N)# impression pour comprendre
        if randint(1,50)==1:
            s=s+1
    N=N-s
        
print("Evolution du nombre de noyaux restants: N = ",L)
t=[i for i in range (len(L))]

plt.plot(t,L,'.',color="blue")
plt.show()

Je comprends :

Script final

Vous pouvez le commenter maintenant ;)

import matplotlib.pyplot as plt
from random import randint
N=int(input("Saisir le nbre initial de noyaux en valeur entière (ex 10000): N0="))
L=[]

while N>0:
    L.append(N)
    s=0
    for i in range (N):
        if randint(1,50)==1:
            s=s+1
    N=N-s
        
print("Evolution du nombre de noyaux restants: N = ",L)
t=[i for i in range (len(L))]

plt.plot(t,L,'.',color="blue")
plt.show()


Physique - Mouvement sur un plan incliné 

Source

Extrait d'un manuel de physique. Par respect pour le concepteur de ce script, je laisse les lignes ###TODO donc ce programme est à terminer! Il vous manque l'accélération ;)

Un peu d'histoire pour comprendre

 

Si vous voulez vous amuser à reproduire cette expérience et à trouver la position des 4 clochettes, voici un lien vers un dossier zippé contenant :

A vous de le modifier pour permettre par exemple à l'utilisateur de saisir 4 valeurs pour les x1... x4 afin d'entendre 4 ding à intervalles réguliers ;). Je précise que Galilée recherche une durée constante entre chaque clochette ;)))
Attention, ce script utilise la bibliothèque playsound, j'ai dû l'installer!

Dossier zippé: musique_galilee.zip

 

Script fonctionnel

import matplotlib.pyplot as plt
import pandas as pd
mesures=pd.read_csv('cylindre_plan_incline.csv', sep=";",decimal=",",encoding="utf-8")
valeurs=mesures.values.tolist()

t=[];x=[];y=[];L=[t,x,y]

for i in range(len(valeurs)):
    t.append(valeurs[i][0]);x.append(valeurs[i][1]);y.append(valeurs[i][2])

            
vx=[];vy=[];ax=[];ay=[]
for i in range (1,len(x)-1):
    vx.append((x[i+1]-x[i-1])/(t[i+1]-t[i-1]))
    vy.append((y[i+1]-y[i-1])/(t[i+1]-t[i-1]))
### TODO
#   A compléter
    
plt.subplot(2,1,1);plt.title("Vitesse")
plt.quiver(x[1:-1],y[1:-1],vx,vy,color="green")
plt.axis('equal');plt.plot(x,y,"ro")

plt.subplot(2,1,2);plt.title("Accélération")
### TODO
#   A compléter

plt.show()

Comprendre le script


Chimie - Dosage d'une solution d'acide par la soude

Source

Extrait d'un manuel de chimie. Ce script n'a aucune erreur!

La théorie pour comprendre

 

Je retiens:

 

Des print() pour comprendre...

import matplotlib.pyplot as plt
import numpy as np
C_B=0.2
V_A=5
V_E=15
C_A=C_B*V_E/V_A
n_A=C_B*V_E*1e-3

V_B1=np.linspace(0,V_E,V_E*1+1) # V_E*1+1 -valeur modifiée pour simplifier l'affichage!
n_a1=(C_A*V_A-C_B*V_B1)*1e-3
n_b1=C_B*V_B1*1e-3
n_B1=0*V_B1

V_B2=np.linspace(V_E,V_E*1.5,V_E*10+1)
n_a2=0*V_B2
n_b2=(0*V_B2+C_B*V_E)*1e-3
n_B2=C_B*(V_B2-V_E)*1e-3

print(V_E,V_E*10+1)
print("V_B1=",V_B1)
print("n_a1=",n_a1)
print("n_b1=",n_b1)
print("n_B1=",n_B1)

Je comprends:

Je dois comprendre aussi que mon dosage se découpe en 2 étapes:

J'anticipe le script final:

 

Script final

import matplotlib.pyplot as plt
import numpy as np
C_B=0.2
V_A=5
V_E=15
C_A=C_B*V_E/V_A
n_A=C_B*V_E*1e-3

V_B1=np.linspace(0,V_E,V_E*10+1)
n_a1=(C_A*V_A-C_B*V_B1)*1e-3
n_b1=C_B*V_B1*1e-3
n_B1=0*V_B1

V_B2=np.linspace(V_E,V_E*1.5,V_E*10+1)
n_a2=0*V_B2
n_b2=(0*V_B2+C_B*V_E)*1e-3
n_B2=C_B*(V_B2-V_E)*1e-3

plt.plot(V_B1,n_a1,color="blue",label="AH")
plt.plot(V_B1,n_b1,color="green",label="A-")
plt.plot(V_B1,n_B1,color="red",label="HO-")

plt.plot(V_B2,n_a2,color="blue")
plt.plot(V_B2,n_b2,color="green")
plt.plot(V_B2,n_B2,color="red")

plt.title("Evolution des quantités de matières des espèces \nen fonction du volume de solution titrante versée \nTitrage de l'acide lactique par la soude")
plt.legend(loc="upper right")
plt.xlabel("Volume de la solution titrante (en mL)")
plt.ylabel("Quantités de matières des espèces en solution (en mol)")
plt.grid()

plt.show()

 


Maths - Evaluation d'une population à partir d'un échantillon

Source

https://github.com/exo7math/python2-exo7/blob/master/bigdata/bigdata-1.pdf

Voir l'activité 3 (La formule des tanks).
Plus d’info :
https://fr.wikipedia.org/wiki/Probl%C3%A8me_du_char_d%27assaut_allemand
Pour aller plus loin :
https://fr.wikipedia.org/wiki/Capture-marquage-recapture

 

Intérêt

L'exercice est impressionnant, avec 4 numéros de séries on peut estimer la taille d'un ensemble. C'est le problème des data d'ailleurs, car on ne peut s'avoir ce que les maths peuvent en extraire.

"En plein milieu de la seconde guerre mondiale les Allemands produisent un nouveau tank plus performant. Les Alliés s’inquiètent car ils ne savent pas combien de ces nouveaux tanks sont produits. Les services de renseignements estiment la production à 1500 tanks par mois.
Que disent les mathématiques ?
Les Alliés ont intercepté 4 tanks produits le même mois et qui portent les numéros :
143, 77, 198 et 32."
 

Sujet en pdf

L'image du dessous est cliquable et donne accès:

Aide

En plus de def pour la définition des fonctions demandées, j'ai utilisé :