################ ## ## ## Exercice 3 ## ## ## ################ 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() ################ ## ## ## Exercice 4 ## ## ## ################ print('\nExercice 4\n') # Question 4.1 print("Valrose\b\bZ\rP") # Question 4.2 from time import sleep film = [ "5 ", "4 ", "3 ", "2 ", "1 ", "BOUM !!!"] # L’option flush est utile lorsqu’on lance le code en ligne de # commande def projeter(L): for i in range(len(L)): print(L[i],end="", flush=True) sleep(0.5) print("\b" * len(L[i]),end="", flush=True) print(" " * len(L[i]),end="", flush=True) print("\r",end="", flush=True) # projeter(film) # Question 4.3 def fabriquer_film(n): pellicule = [""] * n for i in range(n): ch = "" for j in range(n): if i==j: ch = ch + "*" else: ch = ch + " " pellicule[i] = ch return pellicule print(fabriquer_film(5)) def fabriquer_film(n): pellicule = [""] * n for i in range(n): pellicule[i] = i*" " + "*" + (n-i-1)*" " return pellicule print(fabriquer_film(5)) # Question 4.4 def projeter_en_boucle(film,n): for i in range(n): projeter(film) print("Fin ") trop_beau = fabriquer_film(5) projeter_en_boucle(trop_beau, 3) for i in range(len(trop_beau)): print(trop_beau[i]) # Question 4.5 def fabriquer_film_horreur(n): dracula = "\U0001f987" cimetière = "\U0001faa6" pellicule = [""] * n for i in range(n): pellicule[i] = i*cimetière + dracula + (n-i-1)*cimetière return pellicule nosferatu = fabriquer_film_horreur(5) projeter_en_boucle(nosferatu, 3) for i in range(len(nosferatu)): print(nosferatu[i]) # Question 4.6 def fabriquer_film_horreur_extended_version(n): dracula = "\U0001f987" cimetière = "\U0001faa6" pellicule = ["x"] * (2*n-2) for i in range(n-1): pellicule[i] = i*cimetière + dracula + (n-i-1)*cimetière pellicule[n+i-1] = (n-i-1)*cimetière + dracula + i*cimetière return pellicule nosferatu_le_retour = fabriquer_film_horreur_extended_version(10) for i in range(len(nosferatu_le_retour)): print(nosferatu_le_retour[i]) projeter_en_boucle(nosferatu_le_retour, 2) ################ ## ## ## Exercice 5 ## ## ## ################ print('\nExercice 5\n') def rechercher(mot, texte): for i in range(len(texte) - len(mot)+1): trouvé=True for j in range(len(mot)): if mot[j] != texte[i+j]: trouvé = False break if trouvé: return i return -1 assert rechercher("toto", "toto") == 0 assert rechercher("toto", "rototo") == 2 assert rechercher("rototo", "roto") == -1 print("VIE :", rechercher("vie", "L’olivier est un bel arbre")) print("MORT :", rechercher("mort", "L’olivier est un bel arbre")) ################ ## ## ## Exercice 6 ## ## ## ################ print('\nExercice 6\n') ## Question 6.1 def xor(c1, c2) : if c1 == c2: return '0' else: return '1' for c1 in '01': for c2 in '01': print(c1,'xor',c2,'=',xor(c1,c2)) ## Question 6.2 def chiffrement(m,k) : res = '' for i in range(len(m)) : c1=m[i] c2=k[i % len(k)] res = res + xor(c1,c2) return res print(chiffrement('1110011','10') == '0100110') ## Question 6.3 def binaire_chiffre(n): res = '' bits="01" for i in range(4): q = n//2 r = n%2 res = bits[r] + res n = q return res # binaire_chiffre # for i in range(10): print(i,":",binaire_chiffre(i)) def binaire(s): res = '' for i in range(len(s)): c = int(s[i]) res = res + binaire_chiffre(c) return res print(binaire('0123')) ## Question 6.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 6.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'))) # nns debut_nss debut décimale# # binaire_chiffre # # binaire # # Chiffrement # 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") # nns debut_nss debut décimale# # binaire_chiffre # # binaire # # Chiffrement # 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") # xor # # nns debut_nss debut décimale# # binaire_chiffre # # binaire # # Chiffrement # # ssid_valide # # boucle for principale #