Variable avec conditions

7 réponses
Avatar
max.abylon
Bonjour,=20

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

par exemple si je cr=E9e une variable batterie:

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

au lieu de=20

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

Merci

7 réponses

Avatar
Doug713705
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
Avatar
Cémoi
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
Avatar
Benoit Izac
Bonjour,

Le 03/03/2016 à 19:37, Cémoi a écrit dans le message
<56d88466$0$650$ :

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
Avatar
Benoit Izac
Bonjour,

Le 03/03/2016 à 19:37, Cémoi a écrit dans le message
<56d88466$0$650$ :

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
Avatar
Alain Ketterlin
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.
Avatar
Cémoi
Le 03/03/2016 20:51, Benoit Izac a écrit :
Bonjour,

Le 03/03/2016 à 19:37, Cémoi a écrit dans le message
<56d88466$0$650$ :

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 :)
Avatar
Pierre Maurette
:
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