IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

Compréhension de la fonction def


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2009
    Messages : 2
    Par défaut Compréhension de la fonction def
    Bonjour,
    je suis étudiant, et je dois à peu près faire toutes les fonctions existantes en code hors fonction. Seulement voilà, je suis bloqué:

    Voilà ma fonction:
    Elle me sert à trier de façon croissante les nombres d'une liste.
    L'affichage dans le def fonction se fait correctement, seulement pas en dehors: j'obtiens une liste vide.
    Quelqu'un saurait-il m'expliquer cette énigme par hasard?
    PSje travaille en 2.6.3, la version installée sur les ordinateurs de mon école)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    # -*- coding: cp1252 -*-
    nombres=[10,9,8,7,6,5,4,3,2,1,0]
    def triCroissant(tableauBase):
        x=[0]*len(tableauBase)
        for i in range(len(tableauBase)):
            x[i]=min(tableauBase)
            tableauBase.remove(min(tableauBase))
        tableauBase=x
        print tableauBase
        del(x)
            #application de TriCroissant aux tableaux pairs/impairs
    triCroissant(nombres)
            #affichage des tableaux
    print "et les voilà triés de façon croissante: "
    print nombres
    Voilà ce que j'obtiens:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
    et les voilà triés de façon croissante: 
    []
    Merci d'avance,
    Naugril

  2. #2
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4 062
    Par défaut
    Pour info le tri d'une liste :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    nombres.sort()
    print nombres
    Qui puis est tu dis ne pas vouloir utiliser de fonctions de listes, mais remove est une fonction de listes.

    Je pense que tu devrais rechercher dans cette page

    http://guigui.developpez.com/sources/TriPython/

    Un exemple fonctionnant très bien

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    nombres=[10,9,8,7,6,5,4,3,2,1,0]
    def Tri_Insertion_Optimise(l):
        for i in xrange(len(l)):
            m=l[i]
            for j in xrange(i+1):
                if m<l[j]:
                    l[j+1:i+1] = l[j:i]
                    l[j]=m
                    break
        print l
    Tri_Insertion_Optimise(nombres)

  3. #3
    Membre Expert
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    1 068
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 068
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tableauBase.remove(min(tableauBase))
    fini bien par vider tableauBase car remove()agit bien sur LE tableauBase 'pointant' sur nombres
    subtilité, '=' créer une nouvelle variable tableauBase qui n'existe que dans la fonction
    je te suggere d'utiliser append sur la même liste, pas besoin d'en creer une autre

    genre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    nombres=[10,9,8,7,6,5,4,3,2,1,0]
    def triCroissant(tableauBase):
        for i in range(len(tableauBase),0,-1):
            m = min(tableauBase[:i])
            tableauBase.append(m)
            del(tableauBase[tableauBase.index(m)])
     
    print nombres
    triCroissant(nombres)
    print "et les voila tries de facon croissante: "
    print nombres

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 11
    Par défaut
    ll me semble que la fonction de tri devrait retourner x et non le del après l'avoir printé...

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2009
    Messages : 2
    Par défaut
    merci beaucoup

    Je n'avais pas pensé à conserver la même variable

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 10
    Dernier message: 26/11/2012, 10h45
  2. problème de compréhension d'une fonction
    Par anas_matlab dans le forum MATLAB
    Réponses: 2
    Dernier message: 26/05/2011, 12h52
  3. [eigs] Utilisation et compréhension de la fonction
    Par mick967 dans le forum MATLAB
    Réponses: 2
    Dernier message: 27/04/2009, 19h54
  4. Compréhension de la fonction FFT
    Par alband85 dans le forum Signal
    Réponses: 2
    Dernier message: 20/02/2008, 02h33
  5. Compréhension d'une fonction sous Oracle
    Par sat83 dans le forum SQL
    Réponses: 2
    Dernier message: 15/11/2007, 14h43

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo