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 :

Problème de mathématiques


Sujet :

Python

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2015
    Messages : 2
    Par défaut Problème de mathématiques
    Bonjour à tous,

    Pour commencer, je suis sur python2.7 et Windows 10. Je précise ne pas être un expert en python, mais je trouve cet outil vraiment passionnant.
    J'ai donc un fichier texte qui se présente comme ceci:

    1 2 1 3 2 3 4 2 4 5 2 5 3 2 3 4 2 4 6 7 6 8 7 8 5 2 5 8 2 8 5 7 5 4 7 4 2 6 2 8 6 8 7 5 7 8 5 8 7 3 7 4 3 4 1 6 1 2 6 2 3 6 3 1 6 1 3 7 3 6 7 6

    Mon but est de savoir si il y a des doublons normal ou inversés dans cette suite en regroupant les nombres deux par deux. Je m'explique, en prenant les 7 premiers termes regroupés par exemple, on a 12, 13, 23, 42, 45, 25 et 32, or, pour moi, 23 est identique à 32, je souhaiterai donc supprimer le terme 32.

    J'ai codé ceci :
    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
    30
    31
    32
    33
    34
    35
    36
    #!/usr/bin/python
    # -*- coding: iso-8859-1 -*-
     
    contenu = open("E:\Desktop\ScriptPython\Reducemesh\POBJ\Granulat1-8.txt", "r").read()
    contenu = contenu.split("z")
     
    fichier = open('E:\Desktop\ScriptPython\Reducemesh\POBJ\Granulat1-9.txt', 'w')
     
    # 71 contenu en tout
    k=0
    for j in range (0, 68-k): # contenu 70 et 71 auront deja ete verifie en fin de chaine
            for i in range (2, 70-k-j): #permet de reduire l'intervalle en fonction que 'j' grandit
                    if contenu[j]+contenu[j+1] == contenu[j+i]+contenu[j+(i+1)]:
                            del contenu[j+i]
                            del contenu[j+i]
                            k=k+2 #reduit l'intervalle a chaque contenu supprime
     
                    elif contenu[j+1]+contenu[j] == contenu[j+i]+contenu[j+(i+1)]:
                            del contenu[j+i]
                            del contenu[j+i]
                            k=k+2
     
                    elif contenu[j]+contenu[j+1] == contenu[j+(i+1)]+contenu[j+i]:
                            del contenu[j+i]
                            del contenu[j+i]
                            k=k+2
     
                    elif contenu[j+1]+contenu[j] == contenu[j+(i+1)]+contenu[j+i]:
                            del contenu[j+i]
                            del contenu[j+i]
                            k=k+2
     
            i=i+2
    j=j+2
     
    print contenu
    J'ai donc évidement l'erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    "if contenu[j]+contenu[j+1] == contenu[j+i]+contenu[j+(i+1)]:
    IndexError: list index out of range"
    Pour le coup je suis un peu bloqué, en plus, je me suis lancé dans quelque-chose d'assez complexe en traitant chaque nombre comme un contenu.
    Quelqu'un aurait-il une idée?

    Merci par avance.

    Ben

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 670
    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 670
    Par défaut
    Salut,

    Ben pour parcourir une liste 2 par 2, il faut regarder dans les détails de la fonction range:
    Si L est votre liste, essayez voir:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    >>> for x in range(0, len(L), 2):
    ...     print(L[x:x+2])
    ...
    Après pour rendre égaux 1, 2 et 2, 1, vous disposez des objets "set":
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    >>> s = set(L[0: 2 ])
    >>> s
    set(['1', '2'])
    >>> s = set(['2', '1'])
    >>> s = set(L[0: 2 ])
    >>> s == set(['2', '1'])
    True
    >>> s == set(['3', '1'])
    False
    Ca c'est pour les idées, les détails sont dans les tutos.

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

Discussions similaires

  1. problème morphologie mathématique
    Par scorpzak25 dans le forum Traitement d'images
    Réponses: 2
    Dernier message: 20/04/2014, 19h27
  2. [Batch] Problème opération mathématique
    Par nekcorp dans le forum Scripts/Batch
    Réponses: 5
    Dernier message: 11/11/2012, 20h05
  3. Probléme morphologie mathématique
    Par kaiseresis dans le forum Images
    Réponses: 1
    Dernier message: 18/06/2008, 13h41
  4. Problème de mathématique
    Par Xhéras dans le forum C++
    Réponses: 4
    Dernier message: 18/07/2007, 17h01
  5. Problème mathématique
    Par Appwal dans le forum Mathématiques
    Réponses: 22
    Dernier message: 13/05/2006, 18h06

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