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 :

Comparer des numéros de version


Sujet :

Python

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    328
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 328
    Points : 240
    Points
    240
    Par défaut Comparer des numéros de version
    Bonjour,

    J'ai un gros souci de logique sur ce coup :

    Comment comparer 2 numéros de version présentés sous cette forme :
    "x.x.x.x" ? Par exemple, la fonction souhaitée devrait pouvoir affirmer que "1.0.2.0" est supérieur à "1.0.1.93".

    Je bloque totalement.

    Merci pour votre aide.

  2. #2
    Membre expérimenté Avatar de pacificator
    Profil pro
    Inscrit en
    Août 2006
    Messages
    1 074
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 074
    Points : 1 728
    Points
    1 728
    Par défaut
    vite fait:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    a,b = [[int(n) for n in version.split(".")] for version in ["1.0.2.0", "1.0.1.93"]]
    print a>b
    "Etre conscient de la difficulté permet de l'éviter.."
    Lao-Tseu.

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    328
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 328
    Points : 240
    Points
    240
    Par défaut
    Ah la vache...
    En quelques minutes, alors que je me prends la tête la-dessus depuis un bail.

    Comme d'habitude, un grand merci Paci.

  4. #4
    Membre expérimenté Avatar de pacificator
    Profil pro
    Inscrit en
    Août 2006
    Messages
    1 074
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 074
    Points : 1 728
    Points
    1 728
    Par défaut
    encore plus simple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    print '1.0.2.0'>'1.0.1.96'
    "Etre conscient de la difficulté permet de l'éviter.."
    Lao-Tseu.

  5. #5
    Expert éminent
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 464
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 464
    Points : 9 251
    Points
    9 251
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    Attentions aux comparaisons entre chaines, qui sont différentes des comparaisons entre nombres:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    print '12'>'3'
    False
    print 12>3
    True
    Ainsi, la version "1.0.1.53" apparaitrait anormalement antérieure à la version "1.0.1.7".

    Tyrtamos
    Un expert est une personne qui a fait toutes les erreurs qui peuvent être faites, dans un domaine étroit... (Niels Bohr)
    Mes recettes python: http://www.jpvweb.com

  6. #6
    Membre expérimenté Avatar de pacificator
    Profil pro
    Inscrit en
    Août 2006
    Messages
    1 074
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 074
    Points : 1 728
    Points
    1 728
    Par défaut
    Bonjour,

    Attentions aux comparaisons entre chaines, qui sont différentes des comparaisons entre nombres:

    Code :

    print '12'>'3'
    False
    print 12>3
    True

    Ainsi, la version "1.0.1.53" apparaitrait anormalement antérieure à la version "1.0.1.7".

    Tyrtamos .
    Ok, merci pour la precision
    J'ai pas suffisamment testé
    C'eut été trop simple...
    "Etre conscient de la difficulté permet de l'éviter.."
    Lao-Tseu.

  7. #7
    Expert éminent
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 464
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 464
    Points : 9 251
    Points
    9 251
    Billets dans le blog
    6
    Par défaut
    Pour comparer 2 numéros de version, je préfère une solution qui renvoie 3 valeurs selon v1>v2, v1==v2 ou v1<v2. Et tant qu'à faire, on peut utiliser le même type de résultat que la fonction python cmp(x1,x2):
    -> <0 si x1<x2
    -> =0 si x1==x2
    -> >0 si x1>x2

    Voilà un exemple de fonction:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    def compversion(v1,v2):
        for e1,e2 in zip(v1.split('.'), v2.split('.')):
            comp = cmp(int(e1), int(e2))
            if comp!=0:
                break
        return comp
    Et voilà des exemples d'utilisation:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    print compversion('2.4.7.75', '2.4.7.75')
    0
    print compversion('2.4.7.75', '2.4.12.3')
    -1
    print compversion('2.4.70.75', '2.4.12.3')
    1
    Bien entendu, si les numéros de version pouvaient ne pas avoir le même nombre de rangs (ex: '2.3.4' et '2.3.4.12'), il faudrait en tenir compte dans le code.

    Tyrtamos
    Un expert est une personne qui a fait toutes les erreurs qui peuvent être faites, dans un domaine étroit... (Niels Bohr)
    Mes recettes python: http://www.jpvweb.com

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

Discussions similaires

  1. la jungle des numéros de version XI R3 !
    Par fred_a dans le forum Administration-Migration
    Réponses: 4
    Dernier message: 19/11/2010, 13h50
  2. Comparer 2 numéros de version
    Par The Jos dans le forum Langage
    Réponses: 1
    Dernier message: 05/11/2010, 12h18
  3. Réponses: 0
    Dernier message: 10/02/2010, 14h24
  4. identification des numéros de versions ?
    Par _vince_ dans le forum Intégration Continue
    Réponses: 12
    Dernier message: 03/09/2008, 09h11
  5. Comparer deux numéros de version
    Par ben130978 dans le forum Langage
    Réponses: 2
    Dernier message: 30/01/2008, 16h58

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