Vous êtes sur la page 1sur 7

Institut Préparatoire aux Etudes Année Universitaire 2017-2018

d'Ingénieur de Bizerte

EXAMEN PARTIEL
D’INFORMATIQUE
DURÉE : 2H
DATE : MAI 2018
CLASSES : 1ére ANNÉE. (MP1+PC1)

PROBLÈME 1 : EVALUATION DE LA FORCE D’UN MOT DE PASSE

Un administrateur d’un site web veut assurer un maximum de sécurité pour les
utilisateurs du site. Pour ceci il décide de réaliser une application qui évalue la force
des mots de passe des différents utilisateurs, sachant qu’un mot de passe est une
chaine de caractères qui ne comporte pas d’espaces.

La force d’un mot de passe varie, selon la valeur d’un score calculé, de "Très faible"
jusqu’à "Très fort" :
 Si le score < 20, la force du mot de passe est "Très faible"
 Sinon si le score < 40, la force du mot de passe est "Faible"
 Sinon si le score < 60, la force du mot de passe est "Moyen"
 Sinon si le score < 80, la force du mot de passe est "Fort"
 Sinon la force du mot de passe est "Très fort"

Le score se calcule en additionnant des bonus et en retranchant des pénalités.


Les bonus attribués sont :
 Nombre total de caractères * 4
 (Nombre total de carcatères − nombre de lettres majuscules) * 2
 (Nombre total de carcatères − nombre de lettres minuscules) * 3
 Nombre de carcatères non alphabétiques * 5
les pénalités imposées sont :
 la longueur de la plus longue séquence de lettres minuscules * 2
 la longueur de la plus longue séquence de lettres majuscules * 2
Exemple :
Pour le mot de passe "Ip&IB_cnc2017", le score de calcule comme suit :
la somme des bonus=13*4+(13-3)*2+(13-5)*2+6*5
car : - le nombre total de caractères=13
- le nombre de lettres majuscules=3
- le nombre de lettres minuscules=5
- le nombre de caractères non alphabétiques=6

1
La somme des pénalités =3*2+2*2
car : - la longueur de la plus longue séquence de lettres minuscules("cnc")=3
- la longueur de la plus longue séquence de lettres majuscules("IB")=2

Le score final = 118-10= 108 ; puisque 118 > 80 alors le mot de passe est considéré
comme "Très fort"

Question 1: Ecrire une fonction en python nombrepasswd() qui permet de saisir le


nombre de mots de passe à tester, le nombre de mots de passe ne doit pas dépasser
10.
Reponse :
Def nombrepasswd() :
While(True) :
Print(‘donner le nombre de mots ‘)
N=int(input())
If N<=10 :
Return(N)

Question 2: Ecrire une fonction saisipassword(n) qui permet de remplir dans un


fichier « password.txt » n mots de passe saisi par l’utilisateur et séparé par une
virgule, sachant qu’un mot de passe est une chaine de caractère qui ne comporte pas
d’espaces.

Def saisipassword(n) :
F=open(‘password.txt ‘,’w’)
For i in range(n):
P=input(‘donner le mot de passe’)
f.write(p+’,’)
f.close()

Question 3: Ecrire une fonction NB_Min_Maj_Nalpha(ch) qui retourne à partir


d’une chaine en paramètre un tuple contenant le nombre de lettres minuscules,
majuscules et le nombre de caractères non alphabétique.
Ex :t=NB_Min_Maj_Nalpha("Ip&IB_cnc2017")
t=(3,5,6)
on peut utiliser les méthodes du type str :
isupper() et islower() : retournent True si la chaîne ne contient respectivement que des
majuscules/minuscules :
"b".isupper() retourne False
"B".isupper() retourne True

2
Def NB_Min_Maj_Nalpha(ch) :
Nbmin=0
Nbmaj=0
Nbnalpha=0
For i in ch :
If i. isnumeric()==False:
If i.isupper() :
Nbmaj= Nbmaj+1
Else :
Nbmin= Nbmin+1
Elif i. isalpha()==False :
Nbnalpha= Nbnalpha+1
Return(Nbmin,Nbmaj,Nbnapha)

Question 4: Ecrire une fonction Seqmax_miniscule(ch) qui retourne à partir d’une


chaine en paramètre la longueur de la plus longue séquence de lettres minuscules.
Def Seqmax_miniscule(ch) :
Lseq=[]
I=0
While(i<len(ch)) :
Seq=’’
While(ch[i].islower()):
Seq=seq+ch[i]
I=i+1
Lseq.append(seq)
I=i+1
Seqmax=L[0]
For i in lseq :
If len(i)>len(seqmax) :
Seqmax=i
Return(seqmax)

Question 5: Ecrire une fonction Seqmax_majuscule(ch) qui retourne à partir d’une


chaine en paramètre la longueur de la plus longue séquence de lettres majuscules.
Def Seqmax_majuscule(ch) :
Lseq=[]
I=0
While(i<len(ch)) :
Seq=’’
While(ch[i].isupper()):
Seq=seq+ch[i]
I=i+1

3
Lseq.append(seq)
I=i+1
Seqmax=L[0]
For i in lseq :
If len(i)>len(seqmax) :
Seqmax=i
Return(seqmax)

Question 6: Ecrire une fonction Scorepassword(ch) qui retourne à partir d’une


chaine en paramètre son score selon le calcul ci dessus.
Def Scorepassword(ch) :
Score=len(ch)*4
T= NB_Min_Maj_Nalpha(ch)
Score=score+ (len(ch)-t[0])*2+( len(ch)- t [1])*3+( len(ch)-t[2])*5
Maxmaj= len(Seqmax_majuscule(ch))
Maxmin=len( Seqmax_minuscule(ch))
Score=score- Maxmaj*2- Maxmin*2
Return(score)

Question 7: Ecrire une fonction Forcepassword(score) qui retourne la force du mot


de passe à partir de la valeur du score en paramètre.
Def Forcepassword(score) :
If score<20 :
Return("Très faible")
Elif score <40:
Return("Faible")
Elif score <60:
Return("Moyen")
Elif score <80:
Return("Fort")
Else:
Return("tres Fort")

4
PROBLÈME 2 : CALCUL MATRICIEL

1. Ecrire les instructions python/numpy permettant de créer un tableau a deux


dimensions, d'ordre 5 et initialiser par des zeros
Import numpy as np
A=Np.zeros(5,5)
2. Soit A la matrice suivante :

[ ]
3 5 7 9
4 6 8 10
5 7 9 11
6 8 10 12

Définir la fonction f qui reçoit en argument une matrice d'ordre 5 initialiser a zéro et
retourne comme sortie la matrice A.
Def f(a) :
For i in range(1,6) :
For j in range(1,6) :
A[i-1,j-1]=i+j*2
3. écrire la commande numpy qui permet de déterminer la transposé de A
np.transpose(A)
4. écrire la commande numpy qui permet de déterminer l’inverse de A.
from numpy.linalg import inv
inv(A)

5. écrire une fonction python intitulé matrice_occurrence permettant de retourner


un dictionnaire contenant pour chaque valeur de la matrice le nombre
d'occurrence dans cette matrice. Par exemple pour la matrice A le dictionnaire
d'occurrence sera : dictocc={3:1,5:2,7:2,9:2,4:1 …………….}
def matrice_occurenc(A) :
dictocc={}

5
for i in range(5) :
for j in range(5):
if A[i,j] in dictocc:
dictocc[a[i,j]]= dictocc[a[i,j]]+1
else:
dictocc[a[i,j]]= 1

6. écrire une fonction python permettant de transformer le contenu de la matrice


A dans une liste LA. Par exemple pour la matrice A
LA=[3,5,7,9,4,6,8,10,5,7,9,11,6,8,10,12]
def transformer(A) :
LA=[]
For i in range(5) :
For j in range(5) :
LA.append(A[i,j])
Return(LA)
7. écrire une fonction python qui reçoit en entrée une liste d'entier positif et
retourne comme sortie une liste de liste de leurs représentations en base 2. par
exemple L=[3,9,6] ---> LB=[[1,1],[1,0,0,1],[1,1,0]]
def conversion(L) :
LB=[]
For i in L :
NB=[]
While(i !=0) :
LB .append(i%2)
I=i//2
Retrun(LB)
8. écrire une fonction python qui reçoit les deux listes précédentes puis retourne
comme sortie un dictionnaire qui associe a chaque nombre ca valeur en base 2.
par exemple DICTB={3 : [1,1],9 :[1,0,0,1],6 :[1,1,0]}
def exercice8(l,LB) :
DICTB={}
for i in range(len(l)) :

6
DICTB[l[i]]=LB[i]
Return(DICTB)

baréme : probleme 1 : 7*1.5


probleme 2 : tous les question *1.5 sauf les questions 1,3 et 4 vaut 1 pt