PYTHON
STRUCTURES REPETITIVES

Objectif

Pour rappel, un bloc d'instructions en Python peut être :

L'objectif ici est d'étudier des structures de répétition. Les lignes de code seront écrites avec l'EDI (Environnement de Développement Intégré) EduPython.

Comprendre

Rappels

Le découpage avec split()

Tester le programme ci-dessous. Il présente la méthode split(), qui sectionne une chaîne de caractères pour former une liste, dont chaque élément est une chaîne de caractères.

txt="Bonjour à tous!"
print(txt.split())

Le séparateur, par défaut un espace, est le point dans le cas ci-dessous.

adIP="192.168.34.17"
adIP=adIP.split(".")
print("Adresse IP convertie en liste : ", adIP)
print("Nombre d'éléments de la liste : ", len(adIP))
print("Premier élément de la liste : ", adIP[0])
print("Dernier élément de la liste : ", adIP[3])

Le choix avec if ... else ...

Une interface réseau d'ordinateur connecté à internet reçoit une adresse IP. Il en existe deux sortes :

Une adresse IPv4 s'écrit avec 4 entiers en notation décimale, séparés par un point. Chaque entier est compris entre 0 et 255.
Exemple : 200.172.10.20

Vérifier l'adresse IPv4 en testant la taille de la liste avec la fonction len(). Elle doit être égale à 4.

adIP=input("Quelle est l'adresse IPv4? ")
adIP=adIP.split(".")

if len(adIP)==4 :
  print("L'adresse IPv4 est valide.")  
else :
  print("L'adresse IPv4 n'est pas valide!")

La répétition : for ... in ...

Vérifier l'adresse IPv4 en testant chaque élément de la liste. Convertis en entiers, ils doivent être compris entre 0 et 255.

adIP=input("Quelle est l'adresse IPv4? ")
adIP=adIP.split(".")

valide="oui"
for i in range(4) : # i prend les valeurs 0, 1, 2 puis 3
  if int(adIP[i])<0 or int(adIP[i])>255 :
    valide="non";

if valide=="oui" :
  print("L'adresse IPv4 est valide.")
else :
  print("L'adresse IPv4 n'est pas valide!")

Variante :

...
for element in adIP :
  if int(element)<0 or int(element)>255 :
    valide="non";
...

Sous-programmes : def ...

Tester à la fois la taille et les éléments de la liste. Les sous-programmes, ici deux fonctions, rendent le code plus lisible.

def nombre_elements(adIP) :
  if len(adIP)!=4 :
    return False
  return True

def valeurs_elements(adIP) :
  for element in adIP :
    if int(element)<0 or int(element)>255 :
      return False
  return True

adIP=input("Quelle est l'adresse IPv4? ")
adIP=adIP.split(".")
if nombre_elements(adIP) and valeurs_elements(adIP) : 
  print("L'adresse IPv4 est valide.")
else :
  print("L'adresse IPv4 n'est pas valide!")

Pratiquer

Conversion décimal-binaire pour un octet

  1. En utilisant la fonction Binaire() ci-dessous, écrire un programme :
  2. Compléter ce programme pour vérifier que la valeur entrée par l'utilisateur soit bien comprise entre 0 et 255. Afficher un message d'erreur si ce n'est pas le cas.
def Binaire(nb) :
  txt=bin(nb)[2:]
  return (8-len(txt))*"0"+txt

print(Binaire(45))

Conversion décimal-binaire pour une adresse IPv4

1. Ecrire un programme :

La fonction Binaire() sera appelée à quatre reprises. Vous pouvez vous inspirer du code ci-dessous.

def Binaire(nb):
  ...

adIP=input("Quelle est l'adresse IPv4? ")
adIP=adIP.split(".")
resultat=""
for element in adIP:
  ...
  
print("L'adresse IP en notation binaire est : ",resultat)

2. Compléter ce programme pour vérifier, au préalable, la validité de l'adresse IPv4 entrée par l'utilisateur. Afficher un message d'erreur si ce n'est pas le cas.

Approfondir

Moyenne de plusieurs notes

Écrire un programme :

Conversion binaire-décimal

1. Réaliser le programme :

2. Modifier le programme pour vérifier :

Exemple de conversion binaire-décimal

1010 0111 =
27 + 25 + 22 + 21 + 20 (en décimal) =
128 + 32 + 4 + 2 + 1 =
167

Annexe

Souvent, une fonction évolue pour s'améliorer au fil du temps. La fonction Binaire() ci-dessous :

def Binaire(nb) :
  a=b=c=d=e=f=g=h="0"
  if nb>=128:
    a="1"
    nb=nb-128
  if nb>=64:
    b="1"
    nb=nb-64
  if nb>=32:
    c="1"
    nb=nb-32
  if nb>=16:
    d="1"
    nb=nb-16
  if nb>=8:
    e="1"
    nb=nb-8
  if nb>=4:
    f="1"
    nb=nb-4
  if nb>=2:
    g="1"
    nb=nb-2
  h=str(nb)
  return a+b+c+d+e+f+g+h

print(Binaire(45))

Plus simple avec la fonction bin()

La fonction bin() prend un nombre entier en paramètre et retourne :

Exemple :

txt=bin(45)
print(txt)
print(type(txt))

La fonction Binaire() modifiée :

def Binaire(nb) :
  txt=bin(nb)
  txt=txt[2:]
  # txt=txt[2:len(txt)]
  if len(txt)==1:
    txt="0000000"+txt
  if len(txt)==2:
    txt="000000"+txt
  if len(txt)==3:
    txt="00000"+txt
  if len(txt)==4:
    txt="0000"+txt
  if len(txt)==5:
    txt="000"+txt
  if len(txt)==6:
    txt="00"+txt
  if len(txt)==7:
    txt="0"+txt
  return txt

print(Binaire(45))

Encore plus simple

En réunissant les lignes 2 et 3 en une seule ligne et en notant que le nombre de zéros à ajouter vaut 8-len(txt) :

def Binaire(nb) :
  txt=bin(nb)[2:]
  return (8-len(txt))*"0"+txt

print(Binaire(45))