Variable avec conditions

Le
max.abylon
Bonjour,

J'aimerais savoir si il est possible de fixer des conditions à une variab=
le à partir du moment ou on la déclare.

par exemple si je crée une variable batterie:

a = 0
batterie( batterie > 0, batterie = 100 if a = 0)

au lieu de

Batterie = x
if batterie < 0:
print error
if a = 0:
batterie = 100

Merci
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Doug713705
Le #26391418
Le 03-03-2016, nous expliquait dans
fr.comp.lang.python
(
Bonjour,



Bonjour,

J'aimerais savoir si il est possible de fixer des conditions à une variable à partir du moment ou on la déclare.

par exemple si je crée une variable batterie:

a = 0
batterie( batterie > 0, batterie = 100 if a = 0)

au lieu de

Batterie = x
if batterie < 0:
print error
if a = 0:
batterie = 100




x = 12
a = 1
batterie = a if a == 0 else x
print batterie

Affichera 12 (la valeur de x) si a != 0 et 0 dans le cas contraire.

la syntaxe est:
nom_variable = <valeur> if <condition> else <autre_valeur>

On peut même enchainer les condittions:
batterie = a if a == 0 else 24 if a==1 else x
print batterie

Affichera 0 si a == 0, 24 si a == 1 et 12 (la valeur de x) dans tous les
autres cas.

--
Et l'on pousse à fond les moteurs
À s'en faire péter la turbine.
C'est tellement classe d'être loser
Surtout les matins où ça winne.
-- H.F. Thiéfaine, Errer humanum est
Cémoi
Le #26391434
Le 03/03/2016 17:37, Doug713705 a écrit :
Le 03-03-2016, nous expliquait dans
fr.comp.lang.python
(
Bonjour,



Bonjour,

J'aimerais savoir si il est possible de fixer des conditions à une variable à partir du moment ou on la déclare.

par exemple si je crée une variable batterie:

a = 0
batterie( batterie > 0, batterie = 100 if a = 0)

au lieu de

Batterie = x
if batterie < 0:
print error
if a = 0:
batterie = 100




x = 12
a = 1
batterie = a if a == 0 else x
print batterie

Affichera 12 (la valeur de x) si a != 0 et 0 dans le cas contraire.

la syntaxe est:
nom_variable = <valeur> if <condition> else <autre_valeur>

On peut même enchainer les condittions:
batterie = a if a == 0 else 24 if a==1 else x
print batterie

Affichera 0 si a == 0, 24 si a == 1 et 12 (la valeur de x) dans tous les
autres cas.




A noter qu'en Python 2.x il faut au moins être en Python 2.5
(https://docs.python.org/2/reference/expressions.html#conditional-expressions)

HTH,

Laurent
Benoit Izac
Le #26391446
Bonjour,

Le 03/03/2016 à 19:37, Cémoi a écrit dans le message

A noter qu'en Python 2.x il faut au moins être en Python 2.5



Python 2.5 - September 19, 2006

Il y en a beaucoup qui utilises une version de Python qui a près de dix
ans ?

--
Benoit Izac
Benoit Izac
Le #26391445
Bonjour,

Le 03/03/2016 à 19:37, Cémoi a écrit dans le message

A noter qu'en Python 2.x il faut au moins être en Python 2.5



Python 2.5 - September 19, 2006

Il y en a beaucoup qui utilisent une version de Python qui a près de dix
ans ?

--
Benoit Izac
Alain Ketterlin
Le #26391451
writes:

J'aimerais savoir si il est possible de fixer des conditions à une
variable à partir du moment ou on la déclare.



Non. On ne peut meme pas imposer un type à la variable, alors des
conditions quelconques...

par exemple si je crée une variable batterie:

a = 0
batterie( batterie > 0, batterie = 100 if a = 0)

au lieu de

Batterie = x
if batterie < 0:
print error
if a = 0:
batterie = 100



(Note au passage que si batterie < 0 et a != 0 tu finis avec une valeur
que tu ne veux pas. J'imagine que "print error" est juste une façon de
parler...)

Je ne suis pas sûr de comprendre ce que tu cherches.

Si ce que tu veux est un "invariant", dans ce cas définis une classe
pour contenir ta valeur, et assure-toi que chaque méthode de cette
classe maintient l'invariant. Mais à part la discipline du programmeur,
il n'y a pas grand chose pour vérifier "automatiquement" ce genre de
choses. (C'est d'ailleurs assez rare dans les langages en général , je ne
connais qu' Eiffel et sa programmation par contrat qui s'en approche).

Si ce que tu cherches est juste un "constructeur", dans ce cas écris u ne
fonction.

-- Alain.
Cémoi
Le #26391540
Le 03/03/2016 20:51, Benoit Izac a écrit :
Bonjour,

Le 03/03/2016 à 19:37, Cémoi a écrit dans le message

A noter qu'en Python 2.x il faut au moins être en Python 2.5



Python 2.5 - September 19, 2006

Il y en a beaucoup qui utilisent une version de Python qui a près de dix
ans ?




L'idée était aussi de dire que Python a quand même mis 16 ans pour
définir une syntaxe et implémenter un opérateur conditionnel ternaire.
Les discussions attenantes à la PEP308 montrent qu'intégrer cette
commodité de langage ne s'est pas faite sans mal et a même failli ne
jamais exister.

Pour ce qui est de savoir s'il y en a beaucoup qui utilisent encore une
version de Python < 2.5, je m'en moque éperdument, je pense juste que
cela peut encore exister, et que si mon commentaire ne devait avoir
jamais servi qu'à une seule personne, j'en serai quand même ravi :)
Pierre Maurette
Le #26391611
:
Bonjour,

J'aimerais savoir si il est possible de fixer des conditions à une variable à
partir du moment ou on la déclare.

par exemple si je crée une variable batterie:

a = 0
batterie( batterie > 0, batterie = 100 if a = 0)

au lieu de

Batterie = x
if batterie < 0:
print error
if a = 0:
batterie = 100




Quid pour batterie == 0 ?
Votre problème n'est pas vraiment posé. Quel est le cycle de vie de 'a'
et 'batterie' ? Quel comportement si 'batterie' sort des clous ?
Peut-être quelques "assert" suffiraient, selon le contexte
d'utilisation ? Ecrire (dériver) une classe numérique "élément d'un
intervalle" semble bien compliqué. En revanche, pourquoi pas une classe
laBatterie dont votre 'batterie' serait un attribut.

[GAG]
Pour affecter sans test ni opérateur ternaire (mais peu lisible et
peut-être lent):

batterie = 100 * (not a) + (not not a) * (batterie / (batterie >= 0))


Bout de test:

def conform(a, batterie):
return 100 * (not a) + (not not a) * (batterie / (batterie >= 0))

for batterie in [0, 123, -123] + [float(b) for b in [0, 123, -123]]:
for a in range(-2, 2) + [float(b) for b in range(-2, 2)]:
try:
print 'a= %s, batterie= %s, batterie -> %s' % (a, batterie,
conform(a, batterie))
except ZeroDivisionError:
print 'Krosserreur a= %s, batterie= %s' % (a, batterie)

[/GAG]

--
Pierre Maurette
Publicité
Poster une réponse
Anonyme