print('\nExercice 3\n') for i in range(32,127): if i<100: print(' ',end='') print(i,chr(i),sep=' ',end=' ') if (i+1)%8 == 0: # retour à la ligne tout les 8 symboles print('') print() 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') ## Question 5.1 def chr_xor(c1, c2) : return '0' if c1 == c2 else '1' for c1 in '01': for c2 in '01': print(c1,'xor',c2,'=',chr_xor(c1,c2)) ## Question 5.2 def chiffrement(m,k) : res = '' for i in range(len(m)) : c1=m[i] c2=k[i % len(k)] res = res + chr_xor(c1,c2) return res print(chiffrement('1110011','10') == '0100110') ## Question 5.3 def binaire_chiffre(n): res = '' k = 8 # k va prendre les valeurs 8, 4, 2 et 1 (puissances de deux décroissantes) for i in range(4) : if n >= k : res = res + '1' n = n - k else : res = res + '0' k = k//2 return res for i in range(10): print(i,":",binaire_chiffre(i)) def binaire(s): res = '' for c in s: res = res + binaire_chiffre(int(c)) return res print(binaire('0123')) ## Question 5.4 def ssid_valide(s): x = int(s[:13]) + int(s[13:]) return (x % 97 == 0) print(ssid_valide('255081416802538')==True) print(ssid_valide('255081410802538')==False) ## Question 5.5 print("\nIl y dix possibilités à tester pour les 8 premiers chiffres (on connaît les sept premiers)") nss = '101011110101101101111101110111111000001010101101001111111010' début_nss = nss[:32] # les 32 premiers bits de nss début = '1980106' def décimale(s): c=0 résultat='' for i in range(len(s)): c = 2*c +int(s[i]) if i%4 == 3: résultat=résultat + str(c) c=0 return résultat print('255081416802538') print(binaire('255081416802538')) print(décimale(binaire('255081416802538'))) for i in range(10): début_décimale = début+str(i) début_binaire = binaire(début_décimale) print(i,':',début_décimale,début_binaire) print("\nCe qui nous donne dix clés à tester") for i in range(10): début_décimale = début+str(i) début_binaire = binaire(début_décimale) clé = chiffrement(début_binaire,début_nss) print(i,':',début_décimale,début_binaire,"clé =",clé) print("\nRegardons celles qui permettent d’obtenir un numéro de sécurité sociale valide\n") for i in range(10): print("= Essai numéro",i, 65*"=") début_décimale = début+str(i) début_binaire = binaire(début_décimale) clé = chiffrement(début_binaire,début_nss) print(début_décimale,début_binaire,"clé =",clé) ssid_binaire_complet = chiffrement(nss,clé) ssid_décimale_complet = décimale(chiffrement(nss,clé)) print("ssid potentiel :",ssid_binaire_complet) if ssid_valide(ssid_décimale_complet): print("\n"+ssid_décimale_complet+" est un numéro de sécurité sociale valide\n") else: print(ssid_décimale_complet,"n'est pas un numéro de sécurité sociale valide\n") print('\nExercice 6\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)