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 :

Question de "style" sur un while (trop peu de "culture" python ?)


Sujet :

Python

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Paysan
    Inscrit en
    Juin 2015
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Paysan
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juin 2015
    Messages : 45
    Points : 39
    Points
    39
    Par défaut Question de "style" sur un while (trop peu de "culture" python ?)
    Bonjour à toutes et tous,
    La fonction CodeDateExU dans le code ci-dessous (2ème fonction) ne me plaît pas, bien qu'elle fonctionne très bien (c'est donc une question de forme, de style ... )
    Ce qui trouble le novice que je suis en Python c'est le bloc implicite du while; le but est de reprendre le for tant que on y a fait quelque chose dedans (c.-à-d. on a exécuté ce qui suit le if ligne[0]==code Date)
    Vous avez déjà bien fait avancer ma "culture" python, merci de m'aider là; je ne vois pas quel concept algorithmique pourrait faire plus "joli" ...

    Le code:
    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    # EncodeDate : Encode l'instant pour références en une chaine de 12 caractères
    # CodeDateExU(date, liste): transforme la date en une chaine unique dans la liste pour référence et tri
    #
    # Début: 09 dec 2019
    #
     
    import time
     
    def EncodeDate():
        lt= time.localtime(time.time())
        #code= '{0:02.0f}{1:02.0f}{2:02.0f}{3:02.0f}{4:02.0f}{5:02.0f}'.
        #    format(lt[0]-2000, lt[1], lt[2], lt[3], lt[4], lt[5])
        # ex.: 191217200543
        for i, val in enumerate(lt):
            if i==0: code= '{0:02.0f}'.format(val-2000)
            elif i==6: break
            else: code += '{0:02.0f}'.format(val)
        return code
     
    def CodeDateExU(codeDate, liste):
        flag= True
        der=len(liste)-1
        while flag:
            for i, ligne in enumerate(liste):
                if ligne[0]==codeDate: codeDate=str(int(codeDate)+1); break
                if i==der: flag= False
        return codeDate

  2. #2
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 290
    Points : 12 756
    Points
    12 756
    Par défaut
    Bonjour,

    Tu devrais peut-être fournir une liste triée sur le champs codeDate, ça t'éviterais de repartir du début n fois.
    Cordialement.

  3. #3
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Salut,

    Citation Envoyé par AgriPacTe Voir le message
    La fonction CodeDateExU dans le code ci-dessous (2ème fonction) ne me plaît pas, bien qu'elle fonctionne très bien (c'est donc une question de forme, de style ... )
    Le code doit essayer de traduire ce que vous voulez faire et réciproquement, lorsqu'on lit le code, on doit comprendre ce que vous avez voulu faire.

    Déjà, parmi ceux qui ont lus ce code, y en a-t-il qui ait compris ce que vous cherchiez à faire?

    On va attendre mais s'il n'y a pas foule, votre code est "illisible".
    C'est à vous de raconter ce que vous vouliez faire en quelques phrases en français. Et quand on lit le code, on doit y retrouver votre intention.

    Dans mon cas, j'ai triché car j'ai du le faire fonctionner sur des jeux de tests pour comprendre "a peu près" de quoi il en retournait. Mais je ne vais pas vous donner la solution tout de suite.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Paysan
    Inscrit en
    Juin 2015
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Paysan
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juin 2015
    Messages : 45
    Points : 39
    Points
    39
    Par défaut
    Merci wiztricks;
    Citation Envoyé par wiztricks Voir le message
    Le code doit essayer de traduire ce que vous voulez faire et réciproquement, lorsqu'on lit le code, on doit comprendre ce que vous avez voulu faire.
    - W
    C'est exactement ce que je pense ; mais je croyais que sur ce point :
    "le but est de reprendre le for tant que on y a fait quelque chose dedans (c.-à-d. on a exécuté ce qui suit le if ligne[0]==code Date)"
    était assez clair ... que dire d'autre ?

    Chaque fois que je rajoute 1 à mon CodeDate, il peut se trouver ailleurs dans la liste; donc Re sur le for ... (ou est l’ambiguïté ?)

    Edition : Est-ce que ce pseudo-code est plus clair:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        # trouve dans la liste de lignes la ligne (une liste) ou ligne[0]=codeDate
        # si pas trouvé c'est fini
        # si trouvé, codeDate+=1 et nouvelle recherche dans la liste

  5. #5
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 290
    Points : 12 756
    Points
    12 756
    Par défaut
    Je persiste avec le trie de la liste.

    Tu tris ta liste sur la colonne voulu.
    ensuite en pseudo-code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    tant que ligne dans liste:
      si ligne[0] > codeDate:
        retourner codeDate
      si ligne[0] = codeDate:
        codeDate+=1
    retourner codeDate
    Avec ton algo, si tu as par exemple 10 000 lignes dans ta liste et que ton codeDate initiale soit 9900 et que les 101 dernieres ligne de ta liste sont justement 9900,9901,9902,...,10000
    Dans ce cas, tu te retrouves à parcourir 101 fois la quasi totalité de ta liste.

    Alors que si ta liste est triée, tu n'auras à la parcourir qu'une seule fois au plus.
    Cordialement.

  6. #6
    Membre émérite

    Homme Profil pro
    Ingénieur calcul scientifique
    Inscrit en
    Mars 2013
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur calcul scientifique

    Informations forums :
    Inscription : Mars 2013
    Messages : 1 229
    Points : 2 328
    Points
    2 328
    Par défaut
    Personnelement je ne comprend pas l'intérêt du while. Car avec le enumerate, la variable de boucle i, va déjà de 0 à len(liste)-1. Donc la condition i==der n'est vérifiée qu'une seule et unique fois, lors du dernier passage dans la boucle. Donc par rapport à ce code, je ne vois pas la différence.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    def CodeDateExU(codeDate, liste):
        for ligne in liste:
             if ligne[0]==codeDate: codeDate=str(int(codeDate)+1); break
        return codeDate

  7. #7
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Salut,

    Citation Envoyé par AgriPacTe Voir le message
    Edition : Est-ce que ce pseudo-code est plus clair:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        # trouve dans la liste de lignes la ligne (une liste) ou ligne[0]=codeDate
        # si pas trouvé c'est fini
        # si trouvé, codeDate+=1 et nouvelle recherche dans la liste
    C'est juste du pseudo-code qui paraphrase le code.

    Ce que j'en ai compris est que, par exemple, la liste L = 1, 2, 3, 5, 6 contient des séquences d'entiers consécutifs et des trous i.e. des intervalles semi-ouverts I = [1, 4[, [5, 7[.
    Et si j'appelle f(n, L) (la fonction codeDateExU):
    • f(n, L) retourne n si n n'est pas dans L ou
    • la borne supérieure de l'intervalle i.e. f(2, L) retourne 4, f(6, L) retourne 7.


    En écrivant çà, j'ai volontairement masqué nombre de détails comme le fait que L n'est pas une liste de nombres mais une liste de listes où le nombre qui nous intéresse est en première position car quand on cherche un algo. on néglige les détails pour le trouver puis on adapte.

    Si je sais exprimer ce que je veux dans un langage "mathématique", on est loin d'un algorithme: il faut reformuler tout çà dans un langage plus pseudocode/algorithmique.

    Je dirais: tant que n est dans L, on incrémente n et on retourne le premier n non trouvé.

    Ce qu'on peut ré-écrire en Python par:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    def f(n, L):
          while n in L:
                  n += 1
          return n
    Pas mal hein.... sauf que çà ne fonctionne pas pour nos liste de listes.

    Ok, ok... fabriquons un g qui adapte les données pour qu'elles soient comestibles par f:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    def g(n, L):
         S = set(z[0] for z in L) 
         return f(n, S)
    Après viennent d'autres considérations: la taille de la liste, est-ce qu'on gagnerait à la trier (si elle ne l'est pas déjà), est-ce que çà vaut le coup de fabriquer des intervalles si la fonction est appelée souvent avec les mêmes données...

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  8. #8
    Nouveau membre du Club
    Homme Profil pro
    Paysan
    Inscrit en
    Juin 2015
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Paysan
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juin 2015
    Messages : 45
    Points : 39
    Points
    39
    Par défaut
    @lg_53 : Ta version de la fonction produit (éventuellement, si il existe dans la liste) un nouveau codeDate qui peut se trouver dans la partie de la liste déjà testée ... donc il faut recommencer; on pourrait la mettre dans un while et on obtiendrais la solution de wiztricks.

    Plus simple, si la liste est triée ... et c'est la solution de disedorgue ...
    Seulement, pour des raisons que je n'ai pas exposé, je souhaiterais ne pas trier la liste; mais là encore, si je n'utilise pas list.sort() mais sorted(), je ne touche pas à ma liste et crée un nouvel objet ... (à tester pour confirmer ?)
    Seulement la liste, avec le temps, sera longue ... et faire le tri ou créer le S de wiztricks sera de plus en plus long ... (je vais pas mettre à priori une lib rust pour cela)

    Par ailleurs je cherchais une expression plus simple que deux fonctions; peut-être avec un lamda ... je n'ai pas encore utiliser lambda, c'est l'occasion de le maîtriser (???)

    Bref, je vais choisir dans ce "paysage" qui m'a beaucoup aidé ... merci

    Si il n'y a pas d'autres "piste" je considère la question comme résolue et je coche

  9. #9
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 690
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 690
    Points : 30 986
    Points
    30 986
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par lg_53 Voir le message
    Personnelement je ne comprend pas l'intérêt du while. Car avec le enumerate, la variable de boucle i, va déjà de 0 à len(liste)-1. Donc la condition i==der n'est vérifiée qu'une seule et unique fois, lors du dernier passage dans la boucle. Donc par rapport à ce code, je ne vois pas la différence.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    def CodeDateExU(codeDate, liste):
        for ligne in liste:
             if ligne[0]==codeDate: codeDate=str(int(codeDate)+1); break
        return codeDate
    Ben il y a la ligne if ligne[0]==codeDate: codeDate=str(int(codeDate)+1); break qui fait sortir du for interne mais comme "flag" n'a pas changé, la boucle "while" relance une itération tandis qu'avec ton code, on quitte la fonction...

    Sinon, pour répondre à wiztricks, je ne pige pas trop le but de cette fonction (faudrait que moi aussi je crée un jeu d'essai et le fasse manger pour voir ce qui se passe)...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  10. #10
    Nouveau membre du Club
    Homme Profil pro
    Paysan
    Inscrit en
    Juin 2015
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Paysan
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juin 2015
    Messages : 45
    Points : 39
    Points
    39
    Par défaut
    Dernière remarque sur mon choix de la solution:
    - si ma liste n'est pas triée c'est pour qu'elle soit conforme à une logique de consultation qui n'a rien à voir avec codeDate mais qui peut être traitée au moment de la consultation ...
    - je choisi d'avoir donc (comme "Archive") une liste triée en faisant toujours des insertions en tête de liste avec un codeDate croissant
    - je n'ai plus à parcourir la liste, mais à tester seulement la première ligne (dernière dans le temps)

    Comme quoi : Quand la réponse à une question est compliquée (ou coûteuse en temps ou autre), la solution est peu-être de changer la question ...

  11. #11
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Citation Envoyé par AgriPacTe Voir le message
    Comme quoi : Quand la réponse à une question est compliquée (ou coûteuse en temps ou autre), la solution est peu-être de changer la question ...
    Le code doit être aligné avec les données.
    Et quand çà devient "brouillon", c'est qu'il y a un soucis quelque part (et c'est pas dans les lignes qu'on regarde).

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  12. #12
    Nouveau membre du Club
    Homme Profil pro
    Paysan
    Inscrit en
    Juin 2015
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Paysan
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juin 2015
    Messages : 45
    Points : 39
    Points
    39
    Par défaut
    Oui; mais c'est pas un "souci"; quand on maîtrise l'architecture des données, elles ne sont pas une hypothèse immuable; on peut changer l'architecture des données pour que les "soucis" n'adviennent pas ... et la question est donc résolue. Ici, même pas une question de liste des champs, des objets, ou autre réalité, simplement l'ordre de stockage ...
    Mais nous sortons là probablement du cadre de "Général Python" ...

  13. #13
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 690
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 690
    Points : 30 986
    Points
    30 986
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par AgriPacTe Voir le message
    mais là encore, si je n'utilise pas list.sort() mais sorted(), je ne touche pas à ma liste et crée un nouvel objet ... (à tester pour confirmer ?)
    Pas besoin de tester, c'est ça. sorted() te fournit un clone mémoire de la liste triée sans modifier la liste d'origine.

    Citation Envoyé par AgriPacTe Voir le message
    Seulement la liste, avec le temps, sera longue ... et faire le tri ou créer le S de wiztricks sera de plus en plus long ... (je vais pas mettre à priori une lib rust pour cela)
    Tu ne peux qu'assumer tes choix. Partir d'une liste triée et y rajouter ensuite des éléments au bon endroit pour qu'elle reste triée te permettrait un algo plus direct mais si tu ne veux/peux pas la trier, tu ne peux ensuite que subir la double boucle obligtoire.
    Ensuite tu peux t'orienter aussi vers des librairies dédiées aux traitements de masse. Comme "collections", ou "iterator", ou "numpy".

    Citation Envoyé par AgriPacTe Voir le message
    Par ailleurs je cherchais une expression plus simple que deux fonctions
    Là on entre dans la partie "architecture". Deux fonctions signifient deux actions indépendantes. Tu peux appeler la première, la seconde, ou les deux à ton choix. Regrouper ces deux fonctions en une seule ça peut se faire si tu es certain de ne jamais avoir besoin de l'une et pas de l'autre.

    Citation Envoyé par AgriPacTe Voir le message
    peut-être avec un lamda ... je n'ai pas encore utiliser lambda, c'est l'occasion de le maîtriser (???)
    Impossible. Une lamba n'accepte pas de structure de contrôle while/for/if/try. Sinon à maitriser c'est pas difiicile. Te sufit de remplacer def fct(param): return expression par fct=lambda param: expression. Mais ça ne marche que pour les fonctions ultra simples n'ayant qu'une instruction et en réalité c'est généralement inutile dans ce cas précis. On se sert de lambdas plutôt dans des situations où une fonction simple est nécessaire sans qu'on veuille la définir en amont. Exemple sorted(liste, key=lambda x: action) sera plus simple que définir d'abord une fonction "toto" faisant l'action et appeler ensuite sorted(liste, key=toto).
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  14. #14
    Nouveau membre du Club
    Homme Profil pro
    Paysan
    Inscrit en
    Juin 2015
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Paysan
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juin 2015
    Messages : 45
    Points : 39
    Points
    39
    Par défaut
    Merci Sve@r pour ces précisions, c'est du temps de gagné sur plusieurs pistes ...
    Bonnes fêtes à tous

  15. #15
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Salut et joyeux noël,

    Citation Envoyé par AgriPacTe Voir le message
    Par ailleurs je cherchais une expression plus simple que deux fonctions; peut-être avec un lamda ... je n'ai pas encore utiliser lambda, c'est l'occasion de le maîtriser (???)
    2 fonctions, c'est juste "mon" choix de distribuer le boulot...
    On peut partir de:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    def f(n, L):
          while n in L:
                  n += 1
          return n
     
    def g(n, L):
         S = set(z[0] for z in L) 
         return f(n, S)
    Et le fusionner en:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    def f(n, L):
          S = set(z[0] for z in L) 
          while n in S:
                  n += 1
          return n
    Mais, je n'ai fait qu'essayer de traduire le comportement du code initial sans à priori sur les données.

    Si vous savez qu'il n'y a pas de "trous" dans les intervalles, quelque soit n, çà sortira le max des valeurs + 1.
    Ce qui s'écrira plus simplement max(L, key=lambda x: x[0]) + 1.

    Et si la liste est rangée par ordre croissant, çà se réduit à L[-1][0] + 1.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  16. #16
    Nouveau membre du Club
    Homme Profil pro
    Paysan
    Inscrit en
    Juin 2015
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Paysan
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juin 2015
    Messages : 45
    Points : 39
    Points
    39
    Par défaut
    Whaou! Très intéressant sur le plan algorithmique; un peu difficile pour mes neurones pas rodés au python, mais quand on a compris ... c'est à cette puissance là qu'il faut que j'accède (patience ... je n'en suis pas là)

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

Discussions similaires

  1. Question basique sur un while
    Par chrislav dans le forum Langage
    Réponses: 3
    Dernier message: 01/02/2009, 19h24
  2. [Débutant] Question sur deux while imbriqués
    Par beegees dans le forum Langage
    Réponses: 2
    Dernier message: 01/01/2007, 20h05
  3. Réponses: 3
    Dernier message: 11/06/2006, 12h09
  4. Question moteur de recherche basé sur XML
    Par Royd938 dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 2
    Dernier message: 04/05/2006, 12h00

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