Programme en python
Répondre à la discussion
Affichage des résultats 1 à 17 sur 17

Programme en python



  1. #1
    invite4c80defd

    Programme en python


    ------

    Bonjour à tous,
    j'ai un exo à faire en python mais je bloque dessus.
    le voici:
    Nom : info.PNG
Affichages : 175
Taille : 124,9 Ko

    pour la premiere partie, je pense qu'il faut utiliser une boucle tant que car on ne sait pas à l'avance le nombre d'itérations que l'on va faire.
    mais je n'arrive pas à déterminer ces valeurs min et max.
    j'en suis à:
    Code:
    def coord(im):
       cmin=[]
       cmax=[]
       lmin=[]
       lmax=[]
       i=0
       j=0
       for i in range(0,H,1):
           while im[i][j] !=0:
              cmin[i]=i
              j=j+1
       
       c=0  (c étant le cmin de l'énoncé : celui que l'on recherche))
       for k in range(0,len(cmin)):
           if c[k]<c:
              c=c[k]
    je ne sais pas si mon code est cohérent.
    deplus, il faudra le faire pour les cmax et lmaxx. Comment peut-on parcourir la matrice à l'envers ?


    quelqu'un aurait-il une idée ?


    merci d'avance

    -----

  2. #2
    invite43901482

    Re : Programme en python

    je ne sais pas si mon code est cohérent.
    Eh bien non ! c_min, c_max, l_min et l_max représente un simple entier, hors dans ton code, tu représentes ces données par un objet list.

    Pour l'algorithme, je crois qu'on cherche trop compliqué, im étant une matrice représentée par un objet list of lists, je partirais sur

    Code:
    for i, line in enumerate(im):
        for index, column in enumerate(line):
            # suite
    tout simplement...

  3. #3
    invite4c80defd

    Re : Programme en python

    j'ai mal nommé mes listes, car elles n'ont en effet rien a à voir avec les variables de l'énoncé.
    je ne connais pas "enumerate", qu'est -ce que cela ? ces choses sont compliquées pour moi: je commence en python...

    est-il possible de faire quelque chose de plus "basique" ?

  4. #4
    invite43901482

    Re : Programme en python

    je ne connais pas "enumerate", qu'est -ce que cela ?
    est-il possible de faire quelque chose de plus "basique" ?
    Ne pas connaître, ne veut pas dire qu'on sort de quelque chose de simple. enumerate est simple, voir une des bases à connaître en python, il faut se renseigner !

    Ensuite cet exercice demande simplement une recherche de minimum et de maximum, on peut donc partir des données suivantes:

    Code:
    l_min, c_min = 0, 0
    l_max, c_max = 0, 0

  5. A voir en vidéo sur Futura
  6. #5
    invite4c80defd

    Re : Programme en python

    je viens de lire votre lien et je ne suis pas sur d'avoir compris..
    on affecte enumerate a un objet de type matrice ou list je suppose
    et pour chaque valeur de cet objet, un entier y est affecté ?


    (mon prof a dit que cet exo pouvait se faire avec des choses "simples" comme for i in....sans utiliser des outils performants comme vous me le suggérez.
    connaitre enumerate est une bonne chose, cela simplifie peut etre le code, mais je ne sui spas sur que ce soit ce qui est demandé dans mon exo...

  7. #6
    invite43901482

    Re : Programme en python

    (mon prof a dit que cet exo pouvait se faire avec des choses "simples" comme for i in....sans utiliser des outils performants comme vous me le suggérez.
    C'est ce que je suggère, non? Que des choses simples, mais si vous voulez du compliqué, partez sur des indices avec range (mais vous devez connaître la taille maximum d'une ligne?).

    Testez enumerate sur votre interpréteur, ça montre tout de suite son intérêt.

    Vous pouvez aussi décomposer le problème en créant une fonction analysant une seule ligne par exemple...

  8. #7
    invite4c80defd

    Re : Programme en python

    je vais peut etre dire une bétise mais ne connait-on pas taille maximum d'une ligne : W ?

    je ne doute absolument de l'efficacité des solutions que vous proposez , mais je risque d'avoir du mal à coder la chose au début..

    mais comment enumerate va m'aider à trouver mes valeurs souhaitées ? car j'affecte en fait à chaque case de la matrice un entier n'est-ce pas ? (d'apres l'exemple du lien)

    désolé si je suis un peu perdu mais j'ai du mal à saisir comment vous pensiez résoudre l'exo

  9. #8
    invite43901482

    Re : Programme en python

    je vais peut etre dire une bétise mais ne connait-on pas taille maximum d'une ligne : W ?
    Il faut connaître le nombre de colonnes...

    mais comment enumerate va m'aider à trouver mes valeurs souhaitées ?
    Enumerate permet de connaître la valeur de la colonne mais aussi son indice dans la ligne.

  10. #9
    invite4c80defd

    Re : Programme en python

    je crois que je vais décomposer le probleme en analysant une ligne à la fois.
    du coup, comment dois-je utiliser mon enumerate ?
    je n'arrive pas à voir le principe de cette méthode meme avec les exemples qui s'y rapportent...

  11. #10
    invite43901482

    Re : Programme en python

    Par exemple sans avoir testé, je dirais

    Code:
    def get_index(line):
        for ind, column in enumerate(line):
            if column == 0:
                return ind
    Si on prend une ligne du genre

    Code:
    l = [255, 255, 255, 0, 255, 0, 255, 255, 0]
    on devrait trouver 3, car la première valeur où l'on trouve 0 dans la ligne se trouve à la colonne 3...

  12. #11
    invite43901482

    Re : Programme en python

    Sur le même principe on rajoute l'index maximum de la colonne

    Code:
    def get_index(line):
        mini, maxi = None, None
        for ind, column in enumerate(line):
            if column == 0:
                if not mini or ind < mini:
                    mini = ind
                if not maxi or ind > maxi:
                    maxi = ind
        return mini, maxi
    et là sur

    Code:
    l = [255, 255, 255, 0, 255, 0, 255, 255, 0]
    on devrait trouver (3, 8) pour la valeur c_min et c_max.

  13. #12
    invite4c80defd

    Re : Programme en python

    je crois que je commence à saisir où vous voulez en venir.
    mais pourriez-vous me justifier la ligne: for ind, column in enumerate(line) car je bloque un peu dessus.

    donc en fait, il faut maintenant étendre cette fonction à toutes les lignes et comparer les lignes entre elles (puis s'interesser aux colonnes) donc avec ce que vous aviez donné au début (je ne sais pas trop comment l'intégrer)

    Code:
    def get_index(line):
        mini, maxi = None, None
        tabmin=[]
        tabmax=[]
        for i, line in enumerate(im):
           for ind, column in enumerate(line):
               if column == 0:
                   if not mini or ind < mini:
                       tabmin[i] = ind
                   if not maxi or ind > maxi:
                       tabmax[i] = ind
        return tabmin,tabmax
    je ne suis pas sur du tout car je crois que j'ai mélangé mes idées sans tenir compte du enumerate...mais vous pourrez me conseiller dessus quand meme

  14. #13
    invite43901482

    Re : Programme en python

    Bon voilà comment je le ferais

    Code:
    def get_index(line):
        mini, maxi = None, None
        for ind, column in enumerate(line):
            if column == 0:
                if not mini:
                    mini = ind
                maxi = ind
        return mini, maxi
        
    def coords(mat):
        c_min, c_max = None, None
        l_min, l_max = None, None
        
        for ind, line in enumerate(mat):
            mini, maxi = get_index(line)
            if not c_min or mini<c_min:
                c_min = mini
            if not c_max or maxi>c_max:
                c_max = maxi
            if not l_min:
                l_min = ind
            l_max = ind
        return [(l_min, c_min), (l_max, c_max)]
    
    m = [[255, 0, 255],[255, 255, 0]]    
    print(coords(m))
    Pour enumerate, i représente l'indice où se trouve la valeur line (donc ici se sera l'indice de la ligne)

  15. #14
    invite43901482

    Re : Programme en python

    Petites modifications, on peut sûrement améliorer la lisibilité mais bon, le temps commence à me manquer...

    Code:
    def get_index(line):
        mini, maxi = None, None
        for ind, column in enumerate(line):
            if column == 0:
                if not mini:
                    mini = ind
                maxi = ind
        return mini, maxi
        
    def coords(mat):
        c_min, c_max = None, None
        l_min, l_max = None, None
        
        for ind, line in enumerate(mat):
            cmini, cmaxi = get_index(line)
            if cmini>=0:
                if not c_min or cmini<c_min:
                    c_min = cmini
                if not c_max or cmaxi>c_max:
                    c_max = cmaxi
                if l_min==None:
                    l_min = ind
                l_max = ind
    
        return [(l_min, c_min), (l_max, c_max)]
    
    m = [[255, 0, 255],[255, 255, 0]]    
    print(coords(m))

  16. #15
    invite4c80defd

    Re : Programme en python

    merci beaucoup pour votre programme , je vais analyser tout ça et vous dirai si je rencontre des difficultés.

    bonne soirée

  17. #16
    invite4c80defd

    Re : Programme en python

    Bonjour,
    j'ai des soucis de compréhension a plusieurs endroits.
    tout d'abord, pour ce morceau de code:
    if column == 0:
    if not mini:
    mini = ind
    maxi = ind
    je ne comprend pas le "not mini" car on ne connait pas mini dans le programme, comment peut-on faire une condition dessus ?
    j'ai le meme souci dans le code:

    if not c_min or cmini<c_min:
    c_min = cmini
    if not c_max or cmaxi>c_max:
    c_max = cmaxi
    comment cela est-il possible ?

    merci d'avance

  18. #17
    invite4c80defd

    Re : Programme en python

    Pour la deuxieme partie: (calculer proportion d'élements identiques)
    pour y répondre, je pensais utiliser un compteur qui augmente de 1 en 1 à chaque fois que l'on trouve deux cases noires situées au meme endroit dans la matrice .
    j'avais pensé à : (les deux matrices ont meme dimension)
    Code:
    def proportion(im1,im2):
       for i in range(0,len(im1),1)):
           for j in range(0,len(im1[0])):
               if im1[i][j]== im2[i][j]==0:
                   c=c+1
       return c/( len(im1)*len(im2[0]) )
    mais je ne sais pas si cela répond à la question , qu'en dites-vous ?


    merci d'avance

Discussions similaires

  1. Besoin d'explication sur un programme en Python 3
    Par invite70312004 dans le forum Programmation et langages, Algorithmique
    Réponses: 5
    Dernier message: 03/03/2014, 12h25
  2. Programme python
    Par invite70312004 dans le forum Programmation et langages, Algorithmique
    Réponses: 5
    Dernier message: 20/09/2013, 22h52
  3. petit problème dans mon programme python
    Par invite84fb3bc0 dans le forum Programmation et langages, Algorithmique
    Réponses: 2
    Dernier message: 05/01/2013, 15h13
  4. Programme en Python
    Par invitec13ffb79 dans le forum Logiciel - Software - Open Source
    Réponses: 7
    Dernier message: 19/09/2011, 20h14
  5. Execution d'un programme avec python
    Par invite242c100d dans le forum Logiciel - Software - Open Source
    Réponses: 1
    Dernier message: 06/09/2004, 17h47