Maintenant que nous sommes à l'aise avec le début du code, voyons la suite :
Ligne 20 : while n_Mno4[-1]>= 0 and n_Ferreux[-1]>=0
Ce qui a été mis en gras va maintenant être traité, il s'agit de ce qui va tourner autour des conditions et de la logique.
Booléen
Un nouveau type de donnée est nécessaire pour parler logique, le booléen.
Il s'agit d'une variable qui prend deux états : vrai ou faux
Sur Python, il s'agit des mots Trueet False. Ce sont des mots réservés par python, vous ne pouvez donc pas nommer une variable avec par exemple.
En pratique, on ne va pas les utiliser explicitement, on le fera au travers de conditions qui permettront de vérifier si c'est "VRAI" ou "FAUX", et le traitement sera fait en fonction de la réponse.
IF....ELIF...ELSE...
IFpermet de vérifier une condition :
if condition:
code si la condition est vrai
else :
code si la condition est fausse
Un exemple plus parlant :
a = int(input("entrer un entier"))
if a > 3: #Si a est strictement supérieur à 3, faire..."
print("a est strictement supérieur à 3")
else : #Sinon, faire..."
print("a n'est pas strictement supérieur à 3")
La structure se combien avec les opérateurs de comparaison :
== égal à
!= différent de (fonctionne aussi avec )
> strictement supérieur à
>= supérieur ou égal à
< strictement inférieur à
<= inférieur ou égal à
Et aussi avec les opérateurs logiques : "AND" et "OR"
Enfin, il existe une variante de IF / ELSE qui ajoute le "ELIF". C'est la contraction de "ELSE IF" et permet de tester des conditions en série à la suite les unes des autres. Dès qu'une condition est vraie, le code de la 1ère condition vérifiée s'execute.
a = int(input("entrer un entier"))
if a > 3: #Si a est strictement supérieur à 3, faire..."
print("a est strictement supérieur à 3")
elif a <1 : #Sinon, vérifier si a est inférieur à 1, et si oui faire..."
print("a est strictement inférieur à 1")
else : #Sinon, ...
print("a est compris dans l'interval [1;3] ")
Une liste est générée à partir de 2 variables 'a' et 'b'. Vous devez définir une fonction qui prend en paramètre la liste et retourne le plus grand nombre des deux. Si les nombres sont égaux, afficher un message de votre choix.
#Variables de départ
a = ...
b = ...
#On créer une liste contenant a et b
liste =
#fonction de comparaison. La fonction prend en paramètre la liste des deux nombre,
#et retourne le plus grand. Si égalité, affiche un message
def plusGrand(liste):
#Variables de départ
a = ...
b = ...
#On créer une liste contenant a et b
liste = [a,b]
#fonction de comparaison. La fonction prend en paramètre la liste des deux nombre,
#et retourne le plus grand. Si égalité, affiche un message
def plusGrand(liste):
if liste[0]>liste[1]:
return liste[0]
elif liste[1]>liste[0]:
return liste[1]
else :
print("Les deux valeurs sont égales")
WHILE
While est visible dans l'extrait des E3C. Littéralement, elle signifie "tant que ..." et s'utilise ainsi :
while condition :
Faire
L'instruction 'faire' s’exécute tant que la condition est vérifiée. C'est une boucle.
Attention : Si aucune condition de sortie n'est possible, le programme tourne indéfiniment ! C'est une boucle infinie. Le programme va planter.
Exemple
a = 1
b = 5
while a<b :
print(a)
a += 1
la condition "a < b" est vrai (1<5), on entre dans la boucle, et le code s’exécute. Puis 'a' est incrémenté, la condition reste vraie, etc... On obtient :
1
2
3
4
Quand a = 5, la condition est fausse, on n'entre pas dans la boucle. C'est pour cela que la valeur 5 ne s'affiche pas.
a = 1
b = 5
while a<b :
print(a)
Ici on entre dans la boucle, mais 'a' n'est pas incrémenté. La condition est toujours vraie. Le programme va tourner en boucle.
C'est utile dans certains cas (on peut alors écrire "while True :" qui revient au même).
En physique, et souvent en Python d'ailleurs, on préférera utiliser une autre façon de boucler : la boucle FOR
FOR
FOR permet de boucler en réalisant des itérations sur une séquence donnée. Plus simplement, on utilise FOR quand on travaille sur un nombre de boucles fini, connu à l'avance. Par exemple quand on travaille sur une liste.
La boucle for s’exécute ainsi :
for element in sequence:
instruction
L’instruction est plus complexe, alors prenons un exemple :
liste = ["a","b","c","d","e","f"]
for element in liste : #Pour chaque element (=donnée) de la liste
print(element) #imprimer l'élement(=donnée)
Remarque : On a nommé element les données de la liste. On peut les appeler comme on veut "i", "var", "truc" ...
Parcours d'une liste avec FOR
Une façon élégante de parcourir une liste est d'utiliser la fonction range(nombre)
range(n) permet en effet de construire une liste de 0 à n-1. Ça tombe bien, les indices des éléments d'une liste de n éléments vont de 0 à n-1
liste = [21,541,11,84,1061,15]
n = len(liste) # n=6
for i in range(n) : # construit une liste [0,1,2,3,4,5] et la parcours
print("liste["+str(i)+"]="+str(liste[i]))
Interprétation :
range(n) va construire une liste qui être parcourue dans la boucle. Cette liste sera temporaire en mémoire (on peut la conserver en affectant une variable : liste_range = list(range(n)) et sera [0,1,2,3,4,5]
for i in range(n) signifie que pour chaque donnée "i" de cette liste, et il y en a 6, on va effectuer une action. On va également récupérer la valeur du "i".
Pour le premier cycle de la boucle, i = 0, on va donc afficher : liste[0]=21.
On se sert du "i" pour l'affichage, et aussi pour aller extraire les données de "liste" qui peuvent être lues par liste[0], liste[1], ...
On dispose de 3 listes contenant pour le nom des points, les abscisses et les ordonnées. On veut extraire les données et les afficher ensemble.
nom = ["A","B","C","D","E","F"]
x = [10,22,35,49,68,79]
y = [45,78,95,105,442,887]
On souhaite obtenir un affichage type mathématique :
Le point A(10;45)
Le point B(22;78)
...
Dans l'idée, on comprend ici qu'il va falloir exécuter la même instruction sur l'ensemble des listes. Donc des boucles.
S'agissant de listes (= contenu fini, nombre de boucles prévisibles) on utilisera la boucle for
L'instruction sera une extraction de donnée, et une mise en forme pour l'affichage
On va devoir dire au programme "Affiche la 1ere donnée de la liste "nom" et de la liste "abscisse" et de la liste "ordonnée". Puis affiche la 2ème, etc...
On aura également besoin de se servir de fonctions liées aux listes, notamment qui donne la longueur d'une liste, et range(nombre) qui va permettre de générer une liste de nombre pour parcourir les 3 listes.
Quand le programme est fonctionnel, transformer en fonction, c'est plus pratique.
Remarque : Dans la définition d'une fonction, on peut spécifier les valeurs par défaut des paramètres.
def affichage(liste_nom=nom,liste_x=x,liste_y=y):
#L'utilisateur peut spécifier 3 paramètre, si il ne le fait pas, les valeurs
# défault sont choisies
Quand c'est fait, proposer une amélioration, qui demandera à l'utilisateur le nombre de points qu'il souhaite afficher (ils seront affichés dans l'ordre)
nom = ["A","B","C","D","E","F"]
x = [10,22,35,49,68,79]
y = [45,78,95,105,442,887]
def affichage(liste_nom=nom,liste_x=x,liste_y=y):
for i in range(len(nom)):
print("Le point "+nom[i]+"("+str(liste_x[i])+";"+str(liste_y[i])+")")