Création d'une fonction

Bonjour,

Configuration: Windows / Edge 98.0.1108.55


je fais actuellement une formation Python et j'ai un petit problème

Je dois créer une fonction qui prend comme paramètre une liste de nombres « stringifiés » et renvoie une liste de nombres.

Exemple:

["1", "3", "3.6"] ➞ [1, 3, 3.6]

Mon code
def to_number_list(lst):

lst = ['1.5', '4.22', '3.7', '6', '7']

print ("Liste originale : " + str(lst))

for i in range(0, len(lst)):
lst[i] = float(lst[i])

print ("liste finale : " + str(lst))


Quand je teste mon code sur un compilateur python en ligne, cela me dit que ma variable lst n'est pas nommée

Par contre, si je supprime def to_number_list(lst): (la définition de la fonction), j'obtiens le résultat attendu

Mais bien sûr pour pouvoir passer le test, je ne peux absolument pas supprimer cette partie du code ;-)

Merci d'avance pour votre aide
Cordialement

5 réponses

  1. Merci pour la réponse et la suggestion

    J'ai du m'y reprendre à deux fois ;-)

    def to_number_list(lst):
    
    lst = ['1.5', '4.22', '3.7', '6', '7']
    
    print ("Liste originale : " + str(lst))
    
    
    for i in range(0, len(lst)):
    lst[i] = float(lst[i])
    
    
    print ("liste finale : " + str(lst)) 
    1. Modérateur
      Bonjour,

      Jamais deux sans trois ....
      L'indentation en python est primordial...
      Je t'invite donc à reposter ton code en utilisant les balises de code ET en mettant l'indentation à celui-ci.
      Et... Si tu n'en as pas.. normal que ton script ne fonctionne pas..
    2. Modérateur
      @jordane45Enfin, ton programme devrait plutôt ressembler à ça
      def to_number_list(lst):
        for i in range(0, len(lst)):
          lst[i] = float(lst[i])
      
        print ("liste finale : " + str(lst))
        
      lst = ['1.5', '4.22', '3.7', '6', '7']
      print ("Liste originale : " + str(lst))
      to_number_list(lst)
      
  2. ok mais il manque les indentations, primordiales en Python
    J'imagine que c'est comme ça ? :

    def to_number_list(lst):
    
        lst = ['1.5', '4.22', '3.7', '6', '7']
        print ("Liste originale : " + str(lst))
    
        for i in range(0, len(lst)): lst[i] = float(lst[i])
        print ("liste finale : " + str(lst))
    


    je comprends que ça ne marche pas : tout le code est dans la fonction
    donc, évidemment, si tu enlèves la ligne def ...., (et les indentations) ca marche
    1. les bases de Python à revoir ...
  3. Bonsoir

    Merci de vos réponses

    Je ne connaissais pas le python jusqu'à hier ;-)))

    Et j'ai jusqu'au 12 mai pour en connaître les bases pour une pré-sélection à une formation...

    ça marche dans le compilateur en ligne espérons que cela fonctionnera sur le site de test (Edabit)

    Merci pour vos conseils
    1. Après vérification, cela fonctionne à merveille sur un compilateur externe (https://www.onlinegdb.com/)
      Liste originale : ['1.5', '4.22', '3.7', '6.35', '7.62']
      liste finale : [1.5, 4.22, 3.7, 6.35, 7.62]


      Mais je n'ai pas le résultat attendu avec le même code sur Edabit même en mettant les deux dernier nombre non entier

      Liste originale : ['1.5', '4.22', '3.7', '6.35', '7.62']
      liste finale : [1.5, 4.22, 3.7, 6.35, 7.62]
      finale de la liste : [1.0, 2.0]
      ÉCHEC : Aucun ne doit être égal à [1, 2]
      ERREUR : Retraçage :
      dans <module>
      Fichier « ./frameworks/python/cw-2.py », ligne 28, dans assert_equals
      expect(actual == expected, message, allow_raise)
      Fichier « ./frameworks/python/cw-2.py », ligne 18, dans expect
      raise AssertException(message)
      cw-2. AssertException : Aucun ne doit être égal à [1, 2]


      dans le résultat, j'ai la ligne en gras qui s'affiche en plus et elle semble tout faire planter

      Merci