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 :

minINT et maxINT en python ?


Sujet :

Python

  1. #1
    Membre confirmé Avatar de KINENVEU
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 184
    Par défaut minINT et maxINT en python ?
    Est-ce qu'il existe des constantes predefinies en python pour exprimer le plus petit INT et le plus grand INT ? (ou avec FLOAT)

    c'est plus simple d'avoir des constantes pour initialise le calcul d'un min ou d'un max.

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

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

    reponse partielle, pour le plus grand int:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    >>> import sys
    >>> sys.maxint
    2147483647
    dependant du système.

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 93
    Par défaut
    Je suppose qu'en Python tous les entiers sont signés ? Donc si maxint vaut 2147483647, il y a de bonnes chances pour que 'minint' (vous me comprenez) descende à -2147483648.

    => c'est vérifié
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    >>>type(-2147483648)
    <type 'int'>
    >>>type(-2147483649)
    <type 'long'>
    CQFD
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    import sys
    maxInt = sys.maxint
    minInt = -(maxInt +1)
    Voilà !

  4. #4
    Membre confirmé Avatar de KINENVEU
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 184
    Par défaut
    ok, merci, mais du coup, je suis oblige de les definir moi-meme.

    est-ce que c'est portable ?

    je veux dire le module 'sys' depend de la machine non ?

    je suis surpris que de telles constantes n'existent pas dans python.

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

    Informations forums :
    Inscription : Août 2006
    Messages : 1 074
    Par défaut
    A mon avis, le maxInt depend de l'architecture de ta machine, il est donc variable.
    Pourquoi cela te pose-t-il problème?

  6. #6
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par défaut
    Citation Envoyé par KINENVEU
    je suis surpris que de telles constantes n'existent pas dans python.
    Ben si, on vient de te le montrer

  7. #7
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 93
    Par défaut
    Evidemment que c'est portable : on définit 'minInt' à partir du 'maxint' donné par le système. C'est donc valable pour n'importe quel système. Quant à ma formule, elle est tout à fait valable, c'est une histoire de codage des entiers.

    Mais je ne comprends vraiment pas pourquoi tu as besoin de connaître ces valeurs... Python sait se débrouiller tout seul : si tu utilises un entier, et que tu dépasses ses limites, il sera automatiquement converti en entier long, ce qui offre des limites bien plus grandes. Et si tu atteins à nouveau ces limites, ta variable sera à nouveau adaptée (de 'long' passera à 'double'). Et là, je ne pense pas que tu puisses raisonnablement envisager d'atteindre ces limites...

    Bref, aucun risque de débordement.

    Edit : après quelques tests, il ne semble pas y avoir de type 'double' : le type 'long' domine. Ca va vraiment très très loin... Je ne sais pas comment Python gère les entiers longs, mais ils ne semblent pas avoir de limites. Je suis monté jusqu'à 2 puissance 4096, et c'est toujours du type 'long'... Intéressant, hmm ?

  8. #8
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par défaut
    Citation Envoyé par Vladislav IV
    Edit : après quelques tests, il ne semble pas y avoir de type 'double' : le type 'long' domine. Ca va vraiment très très loin... Je ne sais pas comment Python gère les entiers longs, mais ils ne semblent pas avoir de limites. Je suis monté jusqu'à 2 puissance 4096, et c'est toujours du type 'long'... Intéressant, hmm ?
    Les entiers longs sont faits pour ça, représenter n'importe quel entier avec n'importe quelle précision.

  9. #9
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 93
    Par défaut
    C'est marrant ça, parce que dans d'autres langages, comme en VB par exemple, on a les entiers courts, les entiers, les entiers longs, doubles, et même quad il me semble. C'est vrai que ça permet d'économiser de la mémoire (pas besoin de 4 octets pour compter jusqu'à 10), mais c'est tellement simple de ne pas avoir à s'en préoccuper !

  10. #10
    Membre confirmé Avatar de KINENVEU
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 184
    Par défaut
    cela ne me pose pas reelement de probleme,

    c'est juste que pour des calculs de min et max (entier ou float)
    j'ai besoin de bornes.

    - je n'utilise pas les fonctions min et max de python, car j'ai des valeurs 'None'
    et que je ne les veux pas ds mon calcul de min et de max.
    de plus, mes valeurs ne sont pas forcement ds la meme liste.
    du coup je parcours l'ensemble de mes elements, (je teste si non-none)
    et je calcule les extrema,
    en initialisant mes valeurs de min et de max respectivement a maxInt et minInt.

    - pour des raisons pratiques et de coherence, j'aurai voulu utiliser des constantes du langage (comme c'est le cas pour d'autres langages).
    en attendant, je definie moi-meme minInt et maxInt.
    c'est juste que comme j'effectue ce genre de calculs ds differents programmes, j'aurai voulu le faire sans avoir a redefinir a chaque fois ces constantes.


    globalement, ca ne pose pas de reels problemes, c'etait juste l'occasion pour moi d'en apprendre un peu plus sur le language et donc de le programmer plus proprement.

    en tout cas, merci de votre patience. :-)

  11. #11
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par défaut
    Citation Envoyé par KINENVEU
    - pour des raisons pratiques et de coherence, j'aurai voulu utiliser des constantes du langage (comme c'est le cas pour d'autres langages).
    en attendant, je definie moi-meme minInt et maxInt.
    c'est juste que comme j'effectue ce genre de calculs ds differents programmes, j'aurai voulu le faire sans avoir a redefinir a chaque fois ces constantes.
    Mais elles existent, ces constantes...

  12. #12
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 93
    Par défaut
    Programmer plus proprement ? En recherchant les extremum d'une liste en partant des limites autorisées par le codage des entiers ?? Je n'appelle pas vraiment ça du "propre"... Voici une recherche d'extremum classique :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    def minmax(liste):
        min = max = liste[0]
        for val in liste:
            if val > max:
                max = val
            if val < min:
                min = val
        return (min, max)
    Maintenant, si tu as plusieurs listes avec des valeurs nulles, tu peux les réunir avant de rechercher les extremum :
    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
    def nettoyer(liste):
        #enlève les valeurs nulles de la liste
        fin = False
        while not fin:
            fin = True
            if None in liste:
                fin = False
                liste.remove(None)
     
    def minmax(*listes):
        liste = []
        for l in listes:
            liste += l
        nettoyer(liste)
        return (min(liste), max(liste))
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    >>> l1 = [2,3,None,1]
    >>> l2 = [5,9,4,None,0]
    >>> minmax(l1, l2)
    (0, 9)

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

Discussions similaires

  1. Constantes MAXINT, MININT
    Par Zazawitch dans le forum C
    Réponses: 3
    Dernier message: 19/01/2006, 20h10
  2. CORBA & PYTHON
    Par stan91stan dans le forum CORBA
    Réponses: 5
    Dernier message: 10/06/2004, 12h32
  3. module .so pour python... ?!
    Par totoetlititi dans le forum Langages de programmation
    Réponses: 2
    Dernier message: 09/03/2004, 14h51
  4. [Lien]erreur dans mon programme python
    Par durnambule dans le forum Général Python
    Réponses: 11
    Dernier message: 29/01/2004, 14h59

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