Les conteneurs Python

Listes

💻 Travail n° 1 Jours de la semaine

🎯 Travail à faire :

  1. Constituer une liste semaine contenant les 7 jours de la semaine.

  2. À partir de cette liste, donner les expressions permettant de récupérer seulement les 5 premiers jours de la semaine d’une part, et ceux du week-end d’autre part en utilisant le slicing avec des indices positifs.

  3. Même question en utilisant des indices négatifs.

  4. Trouver 2 expressions différentes permettant d’accéder au dernier jour de la semaine.

  5. Inverser les jours de la semaine en une seule expression.

💻 Travail n° 2 Nombre de voyelles et de consonnes d’une phrase

🎯 Travail à faire :

On vous donne une expression Python qui permet d’initialiser une liste avec toutes les lettres minuscules de l’alphabet :

alphabet = [chr(lettre) for lettre in range(ord('a'), ord('z') + 1)]
Explication détaillée de cette expression :

Cette expression — qui utilise une compréhension de liste — évite d’avoir à écrire manuellement toutes les lettres de l’alphabet, ce qui la rend plus flexible et moins sujette aux erreurs.

  1. ord('a') et ord('z') :
    La fonction ord() renvoie la valeur Unicode d’un caractère. Ainsi, ord('a') renvoie 97 (la valeur Unicode de 'a') et ord('z') renvoie 122 (la valeur Unicode de 'z').

  2. range(ord('a'), ord('z') + 1) :
    Cette partie crée une séquence de nombres allant de 97 à 122 inclus. Le + 1 est nécessaire car range() n’inclut pas la borne supérieure.

  3. chr(lettre) :
    La fonction chr() est l’inverse de ord(). Elle prend une valeur Unicode et renvoie le caractère correspondant. Ici, elle convertit chaque nombre de la séquence en sa lettre correspondante.

  4. [chr(lettre) for lettre in …​] :
    C’est une compréhension de liste. Elle parcourt chaque nombre de la séquence créée par range(), convertit ce nombre en lettre avec chr(), et ajoute cette lettre à la nouvelle liste.

Le résultat final est une liste contenant toutes les lettres minuscules de 'a' à 'z'.

Faire un script qui :

  • demande à l’utilisateur de saisir une phrase

  • détermine et affiche le nombre de voyelles et de consonnes contenues dans cette phrase

Vous utiliserez pour cela 2 listes : voyelles et consonnes.

La liste consonnes sera initialisée obligatoirement à partir d’une compréhension de liste sachant que l’alphabet comporte 6 voyelles (→ '‘a’, ‘e’, ‘i’, ‘o’, ‘u’, ‘y’) et qu’une consonne est une lettre de l’alphabet …​ qui n’est pas une voyelle !

Une fois les 2 listes voyelles et consonnes initialisées, l’algorithme consiste uniquement à tester l’appartenance de chaque lettre de la phrase à une des ces 2 listes et à incrémenter un compteur le cas échéant.

Vous veillerez au fait que la phrase saisie par l’utilisateur peut contenir des majuscules : il faudra donc la convertir en minuscules avant son traitement (→ consulter Text Sequence Type — str link pour trouver un moyen de le faire).

Résultat attendu :
Saisir une phrase : HELLO world !
La phrase :
        "HELLO world !"
contient 3 voyelles et 7 consonnes

💻 Travail n° 3 Scanner IP basique

On vous demande de coder en Python un scanner IP basique qui va tester chacune des adresses IP de notre réseau (→ 192.168.4.0/22) avec la commande ping pour voir si un hôte y est joignable.

🎯 Travail à faire :

  1. Constituer une liste hosts qui contiendra — sous forme de chaînes de caractères — toutes les adresses IP du réseau 192.168.4.0/22 (→ ['192.168.4.1'…​ '192.168.7.254']).

    Vous pouvez procéder en plusieurs étapes en constituant une liste pour chaque plage (→ 192.168.4.X, 192.168.5.Y, 192.168.6.Z, 192.168.7.T) puis en les ajoutant chacune dans la liste hosts.

  2. Pinger chaque IP contenue dans la liste hosts pour voir si l’hôte correspondant est joignable puis l’ajouter dans une liste reachableHosts le cas échéant.

    Voici une portion de code Python qui permet de pinger une adresse IP en utilisant la commande ping de Windows :

    import subprocess
    
    hostIP = '192.168.4.1' (1)
    
    command = ['ping', '-w', '2000', '-n', '2', hostIP] (2)
    
    ping_response = subprocess.run(command
        , capture_output=True
        , text=True
        , encoding='cp437'
        , timeout=10
        , check=False
        ) (3)
    
    if f"Réponse de {hostIP}" in ping_response.stdout : (4)
        print(f"ping {hostIP} : OK")
    else:
        print(f"ping {hostIP} : NOK")
    1 adresse IP à pinger
    2 définition de la commande ping (avec ses options) à faire exécuter par Python
    3 exécution du ping par Python. La fonction subprocess.run(…​) peut nécessiter de nombreux paramètres. Ici, on spécifie essentiellement que l’on veut capturer (→ capture_output=True) sous forme de texte (→ text=True) la sortie “écran” des commandes ping, encodée par défaut en cp437 dans la console Windows (→ encoding='cp437'). Cette sortie “écran” est ensuite utilisée pour déterminer si le ping a abouti ou pas.
    4 test de réussite ou d’échec du ping en inspectant sa sortie “écran”.

    Sous Windows, on ne peut pas se contenter de tester le code de sortie de la commande ping pour déterminer si un hôte réseau est joignable ou pas. En effet, cette commande peut retourner un code OK même lorsqu’elle indique sur sa sortie écran qu’un hôte n’est pas joignable.

  3. Que signifient les options “-n 2” et “-w 2000” passées à ping dans l’exemple ci-dessus ?

  4. Afficher pour finir la liste des hôtes joignables sur le réseau.

Exemple de résultat attendu (sur un réseau 192.168.4.0/29)
SCANNING hosts in range [192.168.4.1 -> 192.168.4.6] ...
        Attempt to join 192.168.4.1 -> OK
        Attempt to join 192.168.4.2 -> OK
        Attempt to join 192.168.4.3 -> NOK
        Attempt to join 192.168.4.4 -> OK
        Attempt to join 192.168.4.5 -> OK
        Attempt to join 192.168.4.6 -> NOK
SCAN RESULT for range [192.168.4.1 -> 192.168.4.6] :
reachable hosts are :
        192.168.4.1
        192.168.4.2
        192.168.4.4
        192.168.4.5
Bye !

Dictionnaires

💻 Travail n° 4 Calculateur valeur de résistance

On désire faire un script Python qui donne la valeur d’une résistance électrique en Ohms à partir de la couleur des anneaux figurant dessus, un peu à la manière de ce calculateur disponible sur ce site internet link

resistor colors

🎯 Travail à faire :

On vous donne le code partiel du script :

resistor-calculator
def getOhmsFromColors(a, b, c, d) :
   pass

# Point d'entrée du script
if __name__ == "__main__":
    a = "red"
    b = "blue"
    c = "black"
    d = "brown"

    # Appel de la fonction qui détermine la valeur d'une résistance
    # en fonction de la couleur de ces anneaux
    getOhmsFromColors(a, b, c, d)

Compléter le code de la fonction getOhmsFromColors() de façon à ce qu’elle retourne la valeur en Ohms de la résistance dont les couleurs sont passées en paramètre :

  • a = couleur du 1er anneau qui indique le 1er digit de la valeur de la résistance

  • b = couleur du 2ème anneau qui indique le 1er digit de la valeur de la résistance

  • c = couleur du 3ème anneau qui détermine la valeur du facteur de multiplication

  • d = couleur du 4ème anneau qui donne la tolérance

Les couleurs seront spécifiées en anglais.

Vous utiliserez des dictionnaires Python pour associer les couleurs aux valeurs numériques auxquelles elles correspondent.

Vous servirez du Calculateur de code couleur des résistances à 4 anneaux link mis à disposition par le distributeur de composants Digikey pour vérifier les valeurs retournées par votre script en fonction des couleurs saisies.

Le script doit également signaler une erreur si une couleur non prise en charge est fournie à la fonction getOhmsFromColors()

Résultat attendu pour les couleurs spécifiées dans le code partiel fourni :
Resistor value (red|blue|black|brown) = 26 Ω +/-1.00% (25.74 Ω -> 26.26 Ω)

🞄  🞄  🞄