Répéter une fonction

Bonjour,

J'aimerais savoir, comment on peut répéter une fonction prenant deux arguments, qui eux-mêmes se trouvent dans une liste (mais pour lequel il faut changer l'indice de la liste a chaque fois).

Exemple :

liste = ["Azie", "Bob", "Brow", "15", "84", "37"]
def personne(nom, age): 
       print(f"Bonjour {nom} ! Tu as {age} !")

personne(liste[0], liste[3]) # Il faudrait répéter cette ligne autant de fs qu'il y a de personnes.


Merci pour vos réponses !

3 réponses

  1. Modérateur
    Bonjour,

    Si on répond à ta question sans réfléchir, on te dirait :

    liste = ["Azie", "Bob", "Brow", "15", "84", "37"]
    def personne(nom, age): 
           print(f"Bonjour {nom} ! Tu as {age} !")
    
    for i in range(3):
      personne(liste[i], liste[i + 3])


    Le problème, c'est que si
    list
    ne contient pas 6 éléments (3 noms, 3 âges), ça ne marchera plus. Alors on pourrait adapter le code en se disant que par convention la première moitié correspond aux noms et la seconde aux âges et ça donnerait quelque chose du genre :

    liste = ["Azie", "Bob", "Brow", "15", "84", "37"]
    def personne(nom, age): 
           print(f"Bonjour {nom} ! Tu as {age} !")
    
    n = len(liste) // 2
    for i in range(n):
        personne(liste[i], liste[n + i])


    L'idéal serait :
    • soit d'avoir deux listes


    noms = ["Azie", "Bob", "Brow"]
    ages = ["15", "84", "37"]
    
    def personne(nom, age): 
           print(f"Bonjour {nom} ! Tu as {age} !")
    
    for (nom, age) in zip(noms, ages):
        personne(nom, age)
    • soit (comme Phil_1857 le propose) d'avoir un dictionnaire :


    map_nom_age = {
        "Azie" : 15,
        "Bob" : 84,
        "Brow" : 37,
    }
    
    def personne(nom, age): 
           print(f"Bonjour {nom} ! Tu as {age} !")
    
    for (nom, age) in map_nom_age.items():
        personne(nom, age)
    • soit de raisonner avec des listes d'arguments et d'utiliser l'opérateur de splice (c'est un peu plus général, car en python une fonction peut avoir un nombre variable d'argument si certains ont des valeurs par défaut, et cette technique permet également de traiter naturellement les fonctions avec plus de deux arguments) :


    argss = [
        ("Azie", 15),
        ("Bob", 84),
        ("Brow", 37)
    ]
    
    def personne(nom, age):
           print(f"Bonjour {nom} ! Tu as {age} !")
    
    for args in argss:
        personne(*args)


    Bonne chance
    0
    1. Bonjour,

      Et même, pour éviter de décaler les indices de liste de 3 cases, tu pourrais faire un dictionnaire:

      dico = {"Bob":34, "Esther":56, "François":78}
      0
      1. La question est : quand tu écris
        personne(list[0], list[3])
        d'où vient le nombre 3? Tu ne l'as pas choisi au hasard! Une piste, dans ton exemple la liste contient 6 choses dont la 1ère moitié sont des noms.

        Ce qu'il faut faire (toujours pour ton exemple) c'est :
            personne(list[0], list[3])
            personne(list[0+1], list[3+1])
            personne(list[0+2], list[3+2])

        Le moyen de retranscrire cela pour une liste quelconque, c'est une boucle.
        0
        1. Merci, mais j'aimerais ne pas me répéter et donc faire une boucle ?
          0