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.![]()
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.![]()
Bonjour,
reponse partielle, pour le plus grand int:dependant du système.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 >>> import sys >>> sys.maxint 2147483647
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éCQFD
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 >>>type(-2147483648) <type 'int'> >>>type(-2147483649) <type 'long'>
Voilà !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 import sys maxInt = sys.maxint minInt = -(maxInt +1)
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.
A mon avis, le maxInt depend de l'architecture de ta machine, il est donc variable.
Pourquoi cela te pose-t-il problème?
Ben si, on vient de te le montrerEnvoyé par KINENVEU
![]()
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 ?
Les entiers longs sont faits pour ça, représenter n'importe quel entier avec n'importe quelle précision.Envoyé par Vladislav IV
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 !![]()
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. :-)
Mais elles existent, ces constantes...Envoyé par KINENVEU
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 :
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 def minmax(liste): min = max = liste[0] for val in liste: if val > max: max = val if val < min: min = val return (min, max)
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)
Partager