Le sujet demande de rechercher la dernière occurrence, la correction proposée ici parcourt la liste à l'envers et renvoie la première occurrence rencontrée. Il faut donc dans ce cas savoir à écrire un parcours à l'envers à l'aide de range. On peut faire aussi parcourir dans le sens normal jusqu'à la fin et mettre la jour l'indice à chaque fois qu'on rencontre la valeur:
classAdresseIP:def__init__(self,adresse):self.adresse=adressedefliste_octet(self):"""renvoie une liste de nombres entiers, la liste des octets de l'adresse IP"""return[int(i)foriinself.adresse.split(".")]defest_reservee(self):"""renvoie True si l'adresse IP est une adresse réservée, False sinon"""returnself.liste_octet()[3]==0orself.liste_octet()[3]==0#(1)defadresse_suivante(self):"""renvoie un objet de AdresseIP avec l'adresse IP qui suit l’adresse self si elle existe et False sinon"""ifself.liste_octet()[3]<254:octet_nouveau=self.liste_octet()[3]+1returnAdresseIP('192.168.0.'+str(octet_nouveau))#(2)else:returnFalse
Le dernier octet est le 4ème élément (donc celui d'indice 3) de la liste renvoyée par la méthode liste_octet. L'adresse est réservée lorsque ce dernier octect vaut 0 ou 255.
Attention à la conversion de type, pour concaténer le début de l'adresse avec le dernier octet
Attention
La méthode split des chaines de caractères est utilisée sans explications ni exemples dans la méthode liste_octet. Bien comprendre que cette méthode permet de convertir une adresse comme "192.168.0.0" (une chaine de caractères) en [192,168,0,0] (liste d'entiers).
Commentaires
Le sujet demande de rechercher la dernière occurrence, la correction proposée ici parcourt la liste à l'envers et renvoie la première occurrence rencontrée. Il faut donc dans ce cas savoir à écrire un parcours à l'envers à l'aide de
range
. On peut faire aussi parcourir dans le sens normal jusqu'à la fin et mettre la jour l'indice à chaque fois qu'on rencontre la valeur: