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 :

concatenation et boucle


Sujet :

Python

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Mai 2011
    Messages
    202
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2011
    Messages : 202
    Points : 33
    Points
    33
    Par défaut concatenation et boucle
    bonjour

    voila, j'ai une boucle que je voudrai racourcir..

    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
    28
    29
    for i in range(len(cc)):  # nbr de materiaux trouves
     
            if len(cc)==1:        # 1 materiau
                tab1=cc[0]
                mat1min1 = var50[0]
                mat1max1 = var80[0]
                mat1temp1= var70[0]
            if len(cc)==2:        # 2 materiaux
                tab1=cc[0]
                tab2=cc[1]
                mat1min1 = var50[0]
                mat1max1 = var80[0]
                mat1temp1= var70[0]
                mat2min2 = var50[1]
                mat2max2 = var80[1]
                mat2temp2= var70[1]
            if len(cc)==3:        # 3 materiaux
                tab1=cc[0]
                tab2=cc[1]
                tab3=cc[2]
                mat1min1 = var50[0]
                mat1max1 = var80[0]
                mat1temp1= var70[0]
                mat2min2 = var50[1]
                mat2max2 = var80[1]
                mat2temp2= var70[1]
                mat3min3 = var50[2]
                mat3max3 = var80[2]
                mat3temp3= var70[2]
    ......
    y a t il moyen avec une concatenation d'indice de racourcir la boucle

    je pensais a ecrire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if len(cc)==j:
         matmin = "matmin" + str(j)
    l'affectation matmin= var50[j] marche pas

  2. #2
    Membre expérimenté
    Profil pro
    Développeur en systèmes embarqués retraité
    Inscrit en
    Mars 2006
    Messages
    946
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2006
    Messages : 946
    Points : 1 351
    Points
    1 351
    Par défaut
    Salut,

    Vu que ton code n'est pas un "code minimal reproduisant l'erreur et capable d'être lancé", je ne peux pas t'aider.

    Si matmin est une chaine de caractères (ce que je n'ai pas le moyen de savoir), c'est normal que l'affectation ne marche pas. Il faut transformer ta chaine en liste, et seulement après tu pourras changer un élément.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    chaine = "Developpez"
    caracteres = [car for car in chaine]
    caracteres[4] = "X"
    chaine = ""
    for car in caracteres:
        chaine += car
    print chaine
    A+

    Pfeuh

  3. #3
    Expert éminent

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 300
    Points : 6 780
    Points
    6 780
    Par défaut
    Salut,

    Pour simplifier ton code il serait préférable que tu ranges tes données dans des conteneurs.

    Cela se résumerait à quelque chose comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    mats = [{}, {}, {}]
    tabs = []
     
    for i, val in enumerate(cc):
        tabs.append(cc)
        mats[i]['min'] = var50[i]
        mats[i]['max'] = var80[i]
        mats[i]['temp'] = var70[i]
    Créer autant de noms que tu as de données à traiter n'est pas très rationnel et est bien souvent cause d'erreurs.

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Mai 2011
    Messages
    202
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2011
    Messages : 202
    Points : 33
    Points
    33
    Par défaut concatenation et boucle
    oui c'est ca....
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    mats = [{}, {}, {}]
        tabs = []
        letab= []
     
    for i, val in enumerate(cc):
            tabs.append(cc)
            letab.append(tabs[0][i])
            mats[i]['min']  = var50[i]
            mats[i]['max']  = var80[i]
            mats[i]['temp'] = var70[i]
     
     
        print 'letab', letab
    le probleme si par exemple pour letab

    print letab donne :

    [<Material: CV66>, <Material: Al2O3>, <Material: CN56>]

    j'ai a traiter letab[0], letab[1], letab[2] c'est a dire CV66, Al203 CN56

    et je sais pas comment relire letab car je l'envoie vers un fichier javascript

    et je connais pas au depart la taille de letab

    ca peut etre 1, 2,...10 elements

    d'ou tous ces if que je mettais...

    il y a moyen d'initialiser au depart ?

    si j'ai 2 elements et que j'essai d'envoyer letab[3] je n'ai pas en retour l'erreur list index out of range

  5. #5
    Expert éminent

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 300
    Points : 6 780
    Points
    6 780
    Par défaut
    Ben, là je ne saisi pas très bien la question.

    Tu ne sais pas comment relire letab pour l'envoyer vers du javascript ?

    Et dans un boucle ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    for tab in letab:
        send_to_jscrip(tab)
    De quelle manière communiques-tu avec javascript ?

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Mai 2011
    Messages
    202
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2011
    Messages : 202
    Points : 33
    Points
    33
    Par défaut concatenation et boucle
    j'ai avancé vers la solution

    j'ai reglé le probleme javascript

    une premiere fonction envoie la liste (de 3 elements) cree avec enumerate vers un fichier javascript qui renvoie des donnees vers une autre fonction python

    je recupere dans ma fonction python une liste letab avec

    letab : [<Material: CV66>, <Material: Al2O3>, <Material: CN56>]

    le passage par javascript a transformé letab en chaine de 55 caracteres

    alors que je voudrai qu'il soit lu comme une liste de 3 elements CV66, Al2O3, CN56

    cette fois ci enumerate marche pas

  7. #7
    Expert éminent

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 300
    Points : 6 780
    Points
    6 780
    Par défaut
    Ma question reste d'actualité,

    De quelle manière communiques-tu avec javascript ?

  8. #8
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Mai 2011
    Messages
    202
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2011
    Messages : 202
    Points : 33
    Points
    33
    Par défaut concatenation et boucle
    j'utilise django

    les modules communiquent entre eux via les urls

    une fonction du module views appelle un template par

    return render_to_response('fichier.html..

    je rappelle une autre fonction python par un appel getjson...

  9. #9
    Expert éminent

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 300
    Points : 6 780
    Points
    6 780
    Par défaut
    Et dans quel sens le problème se pose-t-il ?

    Python > Javascript:
    Normalement tes fonctions js prennent des arguments comme python, donc tu devrais pouvoir faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    send_to_js(letab[0], letab[1], letab[2]
    send_to_js represente la fonction qui transmet vers js.

    Javascript > Python:
    J'ai justement un exemple sous les yeux:
    Python
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    evl = frame.evaluateJavaScript("updateLatLonFields();")
    coord = str(evl.toString()).split(',')
    frame.evaluateJavaScript est une méthode Qt mais ça ne change rien pour toi.
    Javascript
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    function updateLatLonFields() {
                    var lat = map.getCenter().lat();
                    var lng = map.getCenter().lng();
                    var zoom = map.getZoom();
                    return (lat + "," + lng + "," + zoom);
                    }
    Donc ici, java transforme mes trois données en une seule chaîne de caractères (ce qui est ton cas comme tu le dis plus haut) et en python, grâce à split(','), je récupère mes trois données séparées dans une liste:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [50.17561819584574, 4.376453399658189, 11]
    Bon je ne suis pas expert en Javascript, loin de là, mais ça je sais que ça fonctionne.

  10. #10
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Mai 2011
    Messages
    202
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2011
    Messages : 202
    Points : 33
    Points
    33
    Par défaut concatenation et boucle
    bonjour

    le probleme se pose dans le sens javascript python

    dans mon template je recupere ma variable avec


    <p class= "rep26" width="100" style= "display:none;">{{ tabs }}</p>

    dans mon script j'ai

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <script type="text/javascript">
     
     
    $(document).ready(function () {
     
    var maref= $('p.rep26').text();
    .......


    la variable maref est envoyee vers le module python par

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $.getJSON("{% url search_courb %}", {'mat1': maref,.......

    dans ma fonction python je relie avec

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    letab = request.GET['mat1']

  11. #11
    Expert éminent

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 300
    Points : 6 780
    Points
    6 780
    Par défaut
    D'accord, et Python récupère quoi exactement ? Si tu print, ça donne quoi ?

    Ceci [<Material: CV66>, <Material: Al2O3>, <Material: CN56>] par contre est pour le moins étrange, quel est le type de chaque élément de cette liste ?

  12. #12
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Mai 2011
    Messages
    202
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2011
    Messages : 202
    Points : 33
    Points
    33
    Par défaut concatenation et boucle
    si je fait

    for i in range(len(letab)):
    print letab[i]

    j'obtiens

    [
    <
    M
    a
    t
    e
    r
    i
    a
    l
    :

    C
    V
    6
    6
    >
    ,

    <
    M
    a
    t
    e
    r
    i
    a
    l
    :

    A
    l
    2
    O
    3
    >
    ,

    <
    M
    a
    t
    e
    r
    i
    a
    l
    :

    C
    N
    5
    6
    >
    ]

  13. #13
    Expert éminent

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 300
    Points : 6 780
    Points
    6 780
    Par défaut
    Ouais ...


    je préférerais ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    print letab, type(letab)
    for l in letab:
         print l, type(l)

  14. #14
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Mai 2011
    Messages
    202
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2011
    Messages : 202
    Points : 33
    Points
    33
    Par défaut concatenation et boucle
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    print letab, type(letab)
            for l in letab:
                print l, type(l)

    j'obtiens

    [<Material: CV66>, <Material: Al2O3>, <Material: CN56>] <type 'unicode'>
    [ <type 'unicode'>
    < <type 'unicode'>
    M <type 'unicode'>
    a <type 'unicode'>
    t <type 'unicode'>
    e <type 'unicode'>
    r <type 'unicode'>
    i <type 'unicode'>
    a <type 'unicode'>
    l <type 'unicode'>
    : <type 'unicode'>
    <type 'unicode'>
    C <type 'unicode'>
    V <type 'unicode'>
    6 <type 'unicode'>
    6 <type 'unicode'>
    > <type 'unicode'>
    , <type 'unicode'>
    <type 'unicode'>
    < <type 'unicode'>
    M <type 'unicode'>
    a <type 'unicode'>
    t <type 'unicode'>
    e <type 'unicode'>
    r <type 'unicode'>
    i <type 'unicode'>
    a <type 'unicode'>
    l <type 'unicode'>
    : <type 'unicode'>
    <type 'unicode'>
    A <type 'unicode'>
    l <type 'unicode'>
    2 <type 'unicode'>
    O <type 'unicode'>
    3 <type 'unicode'>
    > <type 'unicode'>
    , <type 'unicode'>
    <type 'unicode'>
    < <type 'unicode'>
    M <type 'unicode'>
    a <type 'unicode'>
    t <type 'unicode'>
    e <type 'unicode'>
    r <type 'unicode'>
    i <type 'unicode'>
    a <type 'unicode'>
    l <type 'unicode'>
    : <type 'unicode'>
    <type 'unicode'>
    C <type 'unicode'>
    N <type 'unicode'>
    5 <type 'unicode'>
    6 <type 'unicode'>
    > <type 'unicode'>
    ] <type 'unicode'>

  15. #15
    Expert éminent

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 300
    Points : 6 780
    Points
    6 780
    Par défaut
    Je ne m'attendais pas à ça, mais bon.

    Donc tu peux splitter ta chaîne.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    >>> letab = u'[<Material: CV66>, <Material: Al2O3>, <Material: CN56>]'
    >>> lt = [s.replace('[', '').replace(']', '').strip() for s in letab.split(',')]
    >>> lt
    [u'<Material: CV66>', u'<Material: Al2O3>', u'<Material: CN56>']

  16. #16
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Mai 2011
    Messages
    202
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2011
    Messages : 202
    Points : 33
    Points
    33
    Par défaut concatenation et boucle
    je peux aussi enlever les < >

    lt = [s.replace('[', '').replace(']', '').replace('<', '').replace('>', '').strip() for s in letab.split(',')]


    [u'Material: CV66', u'Material: Al2O3', u'Material: CN56']

    s'il y avait un moyen d'avoir CV66 Al2O3 CN56 separement ?

  17. #17
    Expert éminent

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 300
    Points : 6 780
    Points
    6 780
    Par défaut
    C'est pareil, tu splittes avec le ':'

    u'Material: Al2O3'.split(':') te retournera [u'Material', ' Al2O3']

  18. #18
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Mai 2011
    Messages
    202
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2011
    Messages : 202
    Points : 33
    Points
    33
    Par défaut concatenation et boucle
    oui merci !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    lt = [s.replace('[', '').replace(']', '').replace('<', '').replace('>', '').replace('Material:', '').strip() for s in letab.split(',')]

    cette fois tout marche

Discussions similaires

  1. requete concatenation en boucle
    Par cell dans le forum SQL
    Réponses: 1
    Dernier message: 15/10/2010, 15h03
  2. [Batch] Concatenation dans une boucle
    Par madislak dans le forum Windows
    Réponses: 5
    Dernier message: 26/06/2007, 13h08
  3. Concatenation a l'interieur de la declaration d'une boucle for
    Par Benjamin2tours dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 10/04/2007, 10h28
  4. Boucle et concatenation
    Par dafalri dans le forum Langage
    Réponses: 4
    Dernier message: 08/12/2006, 14h28
  5. Boucle en VB et concatenation
    Par m3n2o dans le forum IHM
    Réponses: 3
    Dernier message: 08/06/2006, 09h54

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