print('\nExercice 2\n') # Première approche. On crée un variable k pour parcourir la liste L def concatener(L1,L2): n = len(L1) + len(L2) L = [0] * n k=0 # indice dans L for i in range(len(L1)): L[k] = L1[i] k = k+1 for i in range(len(L2)): L[k] = L2[i] k = k+1 return L # Deuxième approche. On ne crée pas de variable k mais on trouve une # formule (i + len(L1) pour le décalage de l’indice dans L à partir de # l’indice de L2. def concatener_bis(L1,L2): n = len(L1) + len(L2) L = [0] * n for i in range(len(L1)): L[i] = L1[i] for i in range(len(L2)): L[i+ len(L1)] = L2[i] return L assert concatener([1,2,3], [4,5,6,7]) == [1,2,3] + [4,5,6,7] assert concatener_bis([1,2,3], [4,5,6,7]) == [1,2,3] + [4,5,6,7] L1 = [1,2,3] L2 = [4,5,6,7] print(L1, "+", L2, "==", concatener(L1,L2)) print('\nExercice 3\n') ## Question 3.1 def car(b): if b: return "T" else: return "F" ## Question 3.2 def formule(a,b): return not (a and b) def tables_2_vérité(formule): booléens = [True, False] print("a b P") for i in range(len(booléens)): for j in range(len(booléens)): a = booléens[i] b = booléens[j] print(car(a),car(b), car(formule(a,b))) tables_2_vérité(formule) ## Question 3.3 def tables_3_vérité(formule): booléens = [True, False] print("a b c P") for i in range(len(booléens)): for j in range(len(booléens)): for k in range(len(booléens)): a = booléens[i] b = booléens[j] c = booléens[k] print(car(a),car(b), car(c), car(formule(a,b,c))) def formule(a,b,c): return (a or not c) and (not a or b) and (not b or c) tables_3_vérité(formule) ## Question 3.4 def égalité(f1,f2): booléens = [True, False] for i in range(len(booléens)): for j in range(len(booléens)): a = booléens[i] b = booléens[j] if f1(a,b) != f2(a,b): return False return True ## Question 3.5 def f1(a,b): return not (a and b) def f2(a,b): return not a or not b def g1(a,b): return not (a or b) def g2(a,b): return not a and not b assert égalité(f1,f2) assert égalité(g1,g2) print('\nExercice 4\n') proust = "Mais au lieu de la simplicité, c'est le faste que je mettais au plus haut rang, si, après que j'avais forcé Françoise, qui n'en pouvait plus et disait que les jambes \"lui rentraient\", à faire les cent pas pendant une heure, je voyais enfin, débouchant de l'allée qui vient de la Porte Dauphine - image pour moi d'un prestige royal, d'une arrivée souveraine telle qu'aucune reine véritable n'a pu m'en donner l'impression dans la suite, parce que j'avais de leur pouvoir une notion moins vague et plus expérimentale, - emportée par le vol de deux chevaux ardents, minces et contournés comme on en voit dans les dessins de Constantin Guys, portant établi sur son siège un énorme cocher fourré comme un cosaque, à côté d'un petit groom rappelant le tigre de feu Baudenord, je voyais - ou plutôt je sentais imprimer sa forme dans mon coeur par une nette et épuisante blessure - une incomparable victoria, à dessein un peu haute et laissant passer à travers son luxe dernier cri des allusions aux formes anciennes, au fond de laquelle reposait avec abandon Mme Swann, ses cheveux maintenant blonds avec une seule mèche grise ceints d'un mince bandeau de fleurs, le plus souvent des violettes, d'où descendaient de longs voiles, à la main une ombrelle mauve, aux lèvres un sourire ambigu où je ne voyais que la bienveillance d'une Majesté et où il y avait surtout la provocation de la cocotte, et qu'elle inclinait avec douceur sur les personnes qui la saluaient." def justification_à_gauche(s,n) : mot = '' ligne = '' taille_ligne = 0 taille_mot = 0 for i in range(len(s)) : if s[i] != ' ' : # Si on est à l'intérieur d'un mot mot = mot + s[i] taille_mot = taille_mot + 1 else : # Si on a fini de lire un mot if taille_ligne+taille_mot+1 <= n and taille_ligne > 0 : # Si le mot rentre dans la ligne ligne = ligne + ' ' + mot taille_ligne = taille_ligne + taille_mot + 1 else : # Sinon, on commence une nouvelle ligne if taille_ligne > 0 : print(ligne) ligne = mot taille_ligne = taille_mot # On remet mot et taille_mot à zéro mot = '' taille_mot = 0 # Il reste à s'occuper du dernier mot if taille_ligne + taille_mot != 0 : if taille_ligne + taille_mot > n : print(ligne) print(mot) else : print(ligne,mot) justification_à_gauche(proust,80) justification_à_gauche(proust,40) print('\nExercice 5\n') def étoile(): print("*",end='') def dièse(): print("#",end='') def nouvelle_ligne(): print("") def tapis_a(largeur,hauteur): for i in range(hauteur): for j in range(largeur): étoile() nouvelle_ligne() def tapis_b(largeur,hauteur): for i in range(hauteur): for j in range(largeur): if j%2==0: # colonne pair étoile() else: # colonne impair dièse() nouvelle_ligne() def tapis_c(largeur,hauteur): for i in range(hauteur): for j in range(largeur): if i%2==0: # ligne pair if j%2==0: # colonne pair étoile() else: # colonne impair dièse() else: # ligne impair if j%2==0: # colonne pair dièse() else: # colonne impair étoile() nouvelle_ligne() def tapis_d(largeur,hauteur): for i in range(hauteur): for j in range(largeur): if i%3==0: # première ligne if j%2==0: # colonne pair étoile() else: # colonne impair dièse() elif i%3==1: # seconde ligne if j%2==0: # colonne pair dièse() else: # colonne impair étoile() else: # troisième ligne étoile() nouvelle_ligne() tapis_a(10,10) print('') tapis_b(10,10) print('') tapis_c(10,10) print('') tapis_d(10,10)