### ### premier cours d'info224 ### retour et compléments sur les boucles... ### ### pour utiliser ma fonction "tictac" qui affiche des TIC et des TAC à l'écran from metronome import tictac ### un premier exemple : une boucle "for" toute simple def ex1(n): for i in range(0,n,1): tictac() print() ### Remarque: ex1 est une **procédure** plutôt qu'une fonction : elle n'a pas ### de "return" et ne renvoie donc aucun résultat... ### ### un appel à ex1(123) affichera exactement 123 TIC-TAC ### trois boucles "for" successives def ex2(l,m,n): for i in range(0,l): ## remarque : le "1" final du range est facultatif tictac() for j in range(0,m): tictac() for k in range(0,n): tictac() print() ### un appel à ex2(1,2,3) affichera exactement 1+2+3=6 TIC-TAC ### deux boucles "for" **imbriquées" def ex3(n): for i in range(0,n): for j in range(0,n): tictac() #print("i =", i, "et j =", j) print() ### un appel à ex3(5) affichera exactement 5*5=25 TIC-TAC ### deux boucles "for" imbriquées, plus complexe... def ex4(n): for i in range(0,n): for j in range(0,i): ## on va jusqu'à "i", le compteur de la première boucle tictac() #print("i =", i, "et j =", j) print() ### un appel à ex4(4) affichera exactement 0+1+2+3+4=10 TIC-TAC: ### pour i=0, la boucle "for j in range(0,i)" se fait 0 fois ### pour i=1, la boucle "for j in range(0,i)" se fait 1 fois ### pour i=2, la boucle "for j in range(0,i)" se fait 2 fois ### pour i=3, la boucle "for j in range(0,i)" se fait 3 fois ### pour i=4, la boucle "for j in range(0,i)" se fait 4 fois ### ### boucles "while" ### ### une boucle "while" ressemble à ### while : ### ... (*) ### ... (*) ### ... (*) ### ... ### ... ### lors de l'exécution, les lignes à l'intérieur de la boucle (les lignes "(*)") ### sont évaluées jusqu'à ce que la condition devienne fausse. ### - si la condition est fausse au départ, les lignes ne sont pas évaluées ### - si la condition ne devient jamais vraie, les lignes sont évaluées une infinité de fois ### (dans ce cas, on peut stopper l'exécution du programme en appuyant sur "Contrôla" et "c" en ### même temps) ### une boucle "while" pour faire comme une boucle "for" def ex5(c): while c > 0: tictac() c = c-1 print() ### c'est comme une boucle "for i in range(c, 0, -1)" ### un appel à ex5(12) affiche exactement 12 TIC-TAC ### un appel à ex5(-12) affichera 0 TIC-TAC ### Attention, si on remplace "c > 0" par "c != 0", alors un appel à ### ex5(-12) affichera une infinité de TIC-TAC def ex6(c): while c > 1: c = 0.6789 * c tictac(0) #print("c =", c) print() ### il est plus difficile de prévoir le nombre de TIC-TAC affichés. ### par exemple, ex6(4) affiche exactement 4 TIC-TAC, ### mais ex6(100) affiche exactement 12 TIC-TAC ### remplacer une boucle "for" par une boucle "while" pour pouvoir ### s'arrèter avant la fin def contient_zero(t): resultat = False # variable indiquant si on a déjà trouvé un 0 dans le tableau i = 0 # variable pour parcourir les cases du tableau while resultat == False and i < len(t): ## attention, il faut bien penser à mettre les deux conditions #print("*", end="") if t[i] == 0: resultat = True i = i+1 #print() return resultat ### la version avec la boucle "for" cherchait jusqu'à la fin du tableau, même si ### la première case contenait un 0... ## resultat = False ## for i in range(0, len(t)): ## print("*", end="") ## if t[i] == 0: ## resultat = True ## print() ## return resultat from random import randint ## la fonction randint(a,b) permet de tirer un nombre entier aléatoire entre a et b def ex7(c): """tire des nombres aléatoires entre 1 et 1000, jusqu'à tomber sur un nombre inférieur ou égal à c""" borne = 1000 n = borne + 1 while n > c: tictac() n = randint(1, borne) print() ### un appel à ex7(10) affichera un nombre de TIC-TAC qui dépend des tirages aléatoires ### si on n'a pas de chance, il pourra y avoir de nombreux tirages ! def ex8(): """affiche des TIC-TAC tant que l'utilisateur ne rentre pas la chaine "OUI" ou "NON" """ choix = "" while choix != "OUI" and choix != "NON": tictac() choix = input() ## la fonction input renvoie comme résultat la chaine de caractères qu'on tape sur le clavier print() ### remarque : cette procédure n'a aucun paramètre ! ### un appel à ex8() affichera autant de TIC-TAC que nécessaire, jusqu'à ce que l'utilisateur rentre "OUI" ou "NON". ### attention, la condition fait la différence entre "oui" et "OUI", ou bien entre "OUI " et "OUI"