Sujet n°37
Sujet original
Pour télécharger l'énoncé original, cliquer ici.
Exercice n°1
Écrire une fonction recherche
qui prend en paramètres elt
un nombre et
tab
un tableau de nombres, et qui renvoie l’indice de la dernière occurrence
de elt
dans tab
si elt
est dans tab
et renvoie -1
sinon.
Exemples
>>> recherche(1, [2, 3, 4])
-1
>>> recherche(1, [10, 12, 1, 56])
2
>>> recherche(1, [1, 50, 1])
2
>>> recherche(1, [8, 1, 10, 1, 7, 1, 8])
5
Une solution
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 | def recherche(elt, tab):
"""
elt - int ou float
tab - list, tableau de nombres
Sortie: int - indice de la dernière occurrence de elt dans tab
si `elt` est dans `tab` et le nombre `-1` sinon.
"""
indice = -1
for i in range(len(tab)):
if tab[i] == elt:
indice = i
return indice
if __name__ == '__main__':
# Exemples de l'énoncé
print(recherche(1, [2, 3, 4]) == -1)
print(recherche(1, [10, 12, 1, 56]) == 2)
print(recherche(1, [1, 50, 1]) == 2)
print(recherche(1, [8, 1, 10, 1, 7, 1, 8]) == 5)
# Exemples supplémentaires
print(recherche(1, [1, 1, 1, 1]) == 3)
print(recherche(0, [1, 1, 1, 1]) == -1)
|
Exercice n°2
On définit une classe gérant une adresse IPv4.
On rappelle qu’une adresse IPv4 est une adresse de longueur 4 octets, notée
en décimale à point, en séparant chacun des octets par un point.
On considère un réseau privé avec une plage d’adresses IP de 192.168.0.0 à
192.168.0.255.
On considère que les adresses IP saisies sont valides.
Les adresses IP 192.168.0.0 et 192.168.0.255 sont des adresses réservées.
Le code ci-dessous implémente la classe AdresseIP
.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 | class AdresseIP:
def __init__(self, adresse):
self.adresse = ...
def liste_octet(self):
"""renvoie une liste de nombres entiers,
la liste des octets de l'adresse IP"""
return [int(i) for i in self.adresse.split(".")]
def est_reservee(self):
"""renvoie True si l'adresse IP est une adresse
réservée, False sinon"""
return ... or ...
def adresse_suivante(self):
"""renvoie un objet de AdresseIP avec l'adresse
IP qui suit l’adresse self
si elle existe et False sinon"""
if ... < 254:
octet_nouveau = ... + ...
return AdresseIP('192.168.0.' + ...)
else:
return False
|
Commentaires sur le code original
-
Pour télécharger l'original du fichier à compléter,
cliquer ici.
-
Dans ce code, le mot « liste » est à comprendre dans le sens
« liste Python » (c'est-à-dire tableau) plutôt que
dans le sens du type abstrait de données liste
étudié en Terminale.
Compléter le code ci-dessus et instancier trois objets :
adresse1
, adresse2
, adresse3
avec respectivement les arguments suivants :
'192.168.0.1'
, '192.168.0.2'
, '192.168.0.0'
.
Vérifier que :
>>> adresse1.est_reservee()
False
>>> adresse3.est_reservee()
True
>>> adresse2.adresse_suivante().adresse
'192.168.0.3'
Une solution
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38 | class AdresseIP:
def __init__(self, adresse):
self.adresse = adresse
def liste_octet(self):
"""renvoie une liste de nombres entiers,
la liste des octets de l'adresse IP"""
return [int(i) for i in self.adresse.split(".")]
def est_reservee(self):
"""renvoie True si l'adresse IP est une adresse
réservée, False sinon"""
return self.adresse == '192.168.0.0' or self.adresse == '192.168.0.255'
def adresse_suivante(self):
"""renvoie un objet de AdresseIP avec l'adresse
IP qui suit l’adresse self
si elle existe et False sinon"""
if self.liste_octet()[3] < 254:
octet_nouveau = self.liste_octet()[3] + 1
return AdresseIP('192.168.0.' + str(octet_nouveau))
else:
return False
if __name__ == '__main__':
# Exemples de l'énoncé
adresse1 = AdresseIP('192.168.0.1')
adresse2 = AdresseIP('192.168.0.2')
adresse3 = AdresseIP('192.168.0.0')
print(adresse1.est_reservee() == False)
print(adresse3.est_reservee() == True)
print(adresse2.adresse_suivante().adresse == '192.168.0.3')
# Exemples supplémentaires
print(adresse2.adresse_suivante().adresse_suivante().adresse == '192.168.0.4')
print(AdresseIP('192.168.0.255').est_reservee() == True)
|