creer une classe pourcentage - Python - Programmation
Marsh Posté le 22-07-2004 à 16:17:32
ben 10.0 c'est l'affichage d'un float
et pourquoi tu veux modifier la précision de ton pourcentage dans les calculs? il suffit de limiter à la représentation et à l'impression -_-
Marsh Posté le 22-07-2004 à 16:23:52
# END __init__
minable ...
tu vas ou avec tes __monTrucPersoMerdique__ ? les __xxx__ sont réservé. ne les utilise pas. fait des membres statiques.
et vérifie tes tests, ils sont redondants
les %s' % str(value) aussi c'est redondants
float.__add__(self, other)
t'as vraiment le chic pour rendre le python si élégant, tout pourri et complètement obfusqué
Marsh Posté le 22-07-2004 à 16:28:41
l'accueil est toujours aussi charmant à ce que je vois...
Marsh Posté le 22-07-2004 à 16:43:18
je dois quand même dire que j'adore le construteur par défaut (val = Percent()) qui balance direct une exception, je trouve ca ultimement classe
Marsh Posté le 22-07-2004 à 17:00:34
accessoirement si tu essaie de faire un int d'une string... ça renvoie une exception aussi...
faudrait arrêter de prendre les autres de haut... et de croire que vous êtes le bon dieu...
Marsh Posté le 22-07-2004 à 17:14:01
int() == 0
float() == 0.0
str() == ''
list() == []
tuple() == ()
dict() == {}
y'aurait pas comme une constante la?
Citation : accessoirement si tu essaie de faire un int d'une string... ça renvoie une exception aussi... |
"%f" % value / "%d" % value > you
fyi c'est pas spécialement prendre les gens de haut (enfin taz si mais il peut se le permettre), c'est soit la base du langage soit de la logique de base
Marsh Posté le 22-07-2004 à 15:52:18
bonjour,
j'ai besoin d'une classe pourcentage permettant de créer des instances (comme avec float, int...), d'additionner ou soustraire deux pourcentage, de multiplier ou diviser un pourcentage par un naturel.
ces pourcentages héritent de float et j'aimerais les limiter à deux digits. seulement, pas moyen de tronquer la valeur...
def __isPercent__(obj):
"""Check if object is an percent instance."""
if not isinstance(obj, Percent):
raise AttributeError, 'percent expected, %s found' % type(obj)
# END __isPercent__
def __isNatural__(obj):
"""Check if object is an positive integer instance."""
if not isinstance(obj, int):
raise AttributeError, 'integer expected, %s found' % type(obj)
elif isinstance(obj, int) and obj < 0:
raise AttributeError, 'natural expected'
# END __isInteger__
##################################################
class Percent(float):
def __init__(self, value=-1):
"""Create a percentage.
@param value: value of the percentage
@type value: integer or float between 0 and 100"""
if value < 0 or value > 100:
raise ValueError, 'incorrect value %s' % str(value)
float.__init__(self, round(value, 2))
# END __init__
def __add__(self, other=None):
"""Add a percentage to another.
@param other: percentage to add
@type other: instance of the Percent class"""
__isPercent__(other)
return Percent(float.__add__(self, other))
# END __add__
def __sub__(self, other=None):
"""Substract a percentage from another.
@param other: percentage to substract
@type other: instance of the Percent class"""
__isPercent__(other)
return Percent(float.__sub__(self, other))
# END __sub__
def __mul__(self, other=None):
"""Multiply a percentage by an int.
@param other: factor
@type other: integer"""
__isNatural__(other)
return Percent(float.__mul__(self, other))
# END __mul__
def __floordiv__(self, other=None):
"""Divide a percentage by an int.
@param other: denominator
@type other: integer"""
__isNatural__(other)
return Percent(float.__floordiv__(self, other))
# END __floordiv__
def __coerce__(self, other=None):
"""Handling different operand types is left to the operation."""
return (self, other)
# END __coerce__
def getUnitar(self):
"""Return the fractional value of the percentage."""
return round(self / 100, 2)
# END getUnitar
# END Percent
ce que je ne comprends pas non plus, c'est qu'en commentant le contenu de ma fonction __init__, Percent(10) renvoie quand meme 10.0
je suis complètement dans le flou...