xxxxxxxxxx
### Exercice 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 le `-1` sinon.
Exemples :
```python
>>> 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
```
É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 le -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
xxxxxxxxxx
xxxxxxxxxx
Jeu de tests (**pas entièrement fourni par l'énoncé original**) :
Jeu de tests (pas entièrement fourni par l'énoncé original) :
xxxxxxxxxx
assert recherche(1, [2, 3, 4]) == -1
assert recherche(1, [10, 12, 1, 56]) == 2
assert recherche(1, [1, 50, 1]) == 2
assert recherche(1, [8, 1, 10, 1, 7, 1, 8]) == 5
assert recherche(1, []) == -1
assert recherche(1, [1, 2, 3]) == 0
xxxxxxxxxx
<details>
<summary style="border:1pt solid slateblue; border-radius:5pt; width:15%; color:slateblue; padding:3px; background-color: lightcyan"> Solutions </summary>
<div style="border:1pt solid slateblue; border-radius:5pt; color:slateblue; padding:3px; background-color: lightcyan">
#### Alternative 1 :
```python
def recherche(elt, tab):
ind = -1
for i in range(len(tab)):
if elt == tab[i]:
ind = i
return ind
```
#### Alternative 2 :
```python
def recherche(elt, tab):
i = len(tab) - 1
while i >= 0:
if elt == tab[i]:
return i
i = i - 1
return -1
```
</div>
</details>
xxxxxxxxxx
### Exercice 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`.
```python
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
```
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 :
```python
>>> adresse1.est_reservee()
False
>>> adresse3.est_reservee()
True
>>> adresse2.adresse_suivante().adresse
'192.168.0.3'
```
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
.
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
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'
xxxxxxxxxx
xxxxxxxxxx
Jeu de tests :
Jeu de tests :
xxxxxxxxxx
assert adresse1.est_reservee() == False
assert adresse3.est_reservee() == True
assert adresse2.adresse_suivante().adresse == '192.168.0.3'
xxxxxxxxxx
<details>
<summary style="border:1pt solid slateblue; border-radius:5pt; width:25%; color:slateblue; padding:3px; background-color: lightcyan"> Remarques sur l'énoncé </summary>
<div style="border:1pt solid slateblue; border-radius:5pt; color:slateblue; padding:3px; background-color: lightcyan">
En production, il est déconseillé d'implémenter des fonctions pouvant selon les cas renvoyer des valeurs de type différents (ici `AdresseIP` ou `bool` pour la fonction `adresse_suivante`).
</div>
</details>
En production, il est déconseillé d'implémenter des fonctions pouvant selon les cas renvoyer des valeurs de type différents (ici AdresseIP
ou bool
pour la fonction adresse_suivante
).
xxxxxxxxxx
<details>
<summary style="border:1pt solid slateblue; border-radius:5pt; width:15%; color:slateblue; padding:3px; background-color: lightcyan"> Solutions </summary>
<div style="border:1pt solid slateblue; border-radius:5pt; color:slateblue; padding:3px; background-color: lightcyan">
#### Alternative 1
```python
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' #<---- confère alternative 2
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
#instances demandées par l'énoncé
adresse1 = AdresseIP('192.168.0.1')
adresse2 = AdresseIP('192.168.0.2')
adresse3 = AdresseIP('192.168.0.0')
```
#### Alternative 2
```python
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.liste_octet()[3] == 0 or self.liste_octet()[3] == 255 #<---- confère alternative 1
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
#instances demandées par l'énoncé
adresse1 = AdresseIP('192.168.0.1')
adresse2 = AdresseIP('192.168.0.2')
adresse3 = AdresseIP('192.168.0.0')
```
</div>
</details>
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' #<---- confère alternative 2
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
#instances demandées par l'énoncé
adresse1 = AdresseIP('192.168.0.1')
adresse2 = AdresseIP('192.168.0.2')
adresse3 = AdresseIP('192.168.0.0')
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.liste_octet()[3] == 0 or self.liste_octet()[3] == 255 #<---- confère alternative 1
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
#instances demandées par l'énoncé
adresse1 = AdresseIP('192.168.0.1')
adresse2 = AdresseIP('192.168.0.2')
adresse3 = AdresseIP('192.168.0.0')