Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 18 sur 18
  1. #1
    Invité de passage
    Homme Profil pro
    Inscrit en
    mai 2011
    Messages
    202
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : mai 2011
    Messages : 202
    Points : 2
    Points
    2

    Par défaut concatenation et boucle

    bonjour

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

    Code :
    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 :
    1
    2
    if len(cc)==j:
         matmin = "matmin" + str(j)
    l'affectation matmin= var50[j] marche pas

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

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

    Informations forums :
    Inscription : mars 2006
    Messages : 838
    Points : 1 064
    Points
    1 064

    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 :
    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 Confirmé

    Homme Profil pro
    Inscrit en
    octobre 2008
    Messages
    1 814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : octobre 2008
    Messages : 1 814
    Points : 2 506
    Points
    2 506

    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 :
    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.
    Vincent
    Oqapy . Qarte . PaQager

  4. #4
    Invité de passage
    Homme Profil pro
    Inscrit en
    mai 2011
    Messages
    202
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : mai 2011
    Messages : 202
    Points : 2
    Points
    2

    Par défaut concatenation et boucle

    oui c'est ca....
    Code :
    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 Confirmé

    Homme Profil pro
    Inscrit en
    octobre 2008
    Messages
    1 814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : octobre 2008
    Messages : 1 814
    Points : 2 506
    Points
    2 506

    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 :
    1
    2
    3
     
    for tab in letab:
        send_to_jscrip(tab)
    De quelle manière communiques-tu avec javascript ?
    Vincent
    Oqapy . Qarte . PaQager

  6. #6
    Invité de passage
    Homme Profil pro
    Inscrit en
    mai 2011
    Messages
    202
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : mai 2011
    Messages : 202
    Points : 2
    Points
    2

    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 Confirmé

    Homme Profil pro
    Inscrit en
    octobre 2008
    Messages
    1 814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : octobre 2008
    Messages : 1 814
    Points : 2 506
    Points
    2 506

    Par défaut

    Ma question reste d'actualité,

    De quelle manière communiques-tu avec javascript ?
    Vincent
    Oqapy . Qarte . PaQager

  8. #8
    Invité de passage
    Homme Profil pro
    Inscrit en
    mai 2011
    Messages
    202
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : mai 2011
    Messages : 202
    Points : 2
    Points
    2

    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 Confirmé

    Homme Profil pro
    Inscrit en
    octobre 2008
    Messages
    1 814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : octobre 2008
    Messages : 1 814
    Points : 2 506
    Points
    2 506

    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 :
    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 :
    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 :
    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 :
    [50.17561819584574, 4.376453399658189, 11]
    Bon je ne suis pas expert en Javascript, loin de là, mais ça je sais que ça fonctionne.
    Vincent
    Oqapy . Qarte . PaQager

  10. #10
    Invité de passage
    Homme Profil pro
    Inscrit en
    mai 2011
    Messages
    202
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : mai 2011
    Messages : 202
    Points : 2
    Points
    2

    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 :
    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 :
    $.getJSON("{% url search_courb %}", {'mat1': maref,.......

    dans ma fonction python je relie avec

    Code :
    letab = request.GET['mat1']

  11. #11
    Expert Confirmé

    Homme Profil pro
    Inscrit en
    octobre 2008
    Messages
    1 814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : octobre 2008
    Messages : 1 814
    Points : 2 506
    Points
    2 506

    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 ?
    Vincent
    Oqapy . Qarte . PaQager

  12. #12
    Invité de passage
    Homme Profil pro
    Inscrit en
    mai 2011
    Messages
    202
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : mai 2011
    Messages : 202
    Points : 2
    Points
    2

    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 Confirmé

    Homme Profil pro
    Inscrit en
    octobre 2008
    Messages
    1 814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : octobre 2008
    Messages : 1 814
    Points : 2 506
    Points
    2 506

    Par défaut

    Ouais ...


    je préférerais ceci:
    Code :
    1
    2
    3
    4
     
    print letab, type(letab)
    for l in letab:
         print l, type(l)
    Vincent
    Oqapy . Qarte . PaQager

  14. #14
    Invité de passage
    Homme Profil pro
    Inscrit en
    mai 2011
    Messages
    202
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : mai 2011
    Messages : 202
    Points : 2
    Points
    2

    Par défaut concatenation et boucle

    Code :
    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 Confirmé

    Homme Profil pro
    Inscrit en
    octobre 2008
    Messages
    1 814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : octobre 2008
    Messages : 1 814
    Points : 2 506
    Points
    2 506

    Par défaut

    Je ne m'attendais pas à ça, mais bon.

    Donc tu peux splitter ta chaîne.

    Code :
    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>']
    Vincent
    Oqapy . Qarte . PaQager

  16. #16
    Invité de passage
    Homme Profil pro
    Inscrit en
    mai 2011
    Messages
    202
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : mai 2011
    Messages : 202
    Points : 2
    Points
    2

    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 Confirmé

    Homme Profil pro
    Inscrit en
    octobre 2008
    Messages
    1 814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : octobre 2008
    Messages : 1 814
    Points : 2 506
    Points
    2 506

    Par défaut

    C'est pareil, tu splittes avec le ':'

    u'Material: Al2O3'.split(':') te retournera [u'Material', ' Al2O3']
    Vincent
    Oqapy . Qarte . PaQager

  18. #18
    Invité de passage
    Homme Profil pro
    Inscrit en
    mai 2011
    Messages
    202
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : mai 2011
    Messages : 202
    Points : 2
    Points
    2

    Par défaut concatenation et boucle

    oui merci !

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

    cette fois tout marche

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •