Je veux revenir True
si et seulement si 3 des 4 valeurs booléennes sont vraies.
Le plus proche que j'ai obtenu est (x ^ y) ^ (a ^ b)
:
Que dois-je faire ?
Je veux revenir True
si et seulement si 3 des 4 valeurs booléennes sont vraies.
Le plus proche que j'ai obtenu est (x ^ y) ^ (a ^ b)
:
Que dois-je faire ?
Je suggère d'écrire le code d'une manière qui indique ce que vous voulez dire. Si vous voulez que 3 valeurs soient vraies, il me semble naturel que la valeur 3 apparaisse quelque part.
Par exemple, dans C++
:
if ((int)a + (int)b + (int)c + (int)d == 3)
...
Ceci est bien défini dans C++
: le standard (§4.7/4)
indique que la conversion bool
a int
donne les valeurs attendues 0 ou 1.
En Java et C#, vous pouvez utiliser la construction suivante :
if ((a?1:0) + (b?1:0) + (c?1:0) + (d?1:0) == 3)
...
A ^ B ? C & D : ( C ^ D ) & A
(A ^ B ^ C ^ D) & ((A & B) | (C & D))
A l'époque où j'avais l'habitude de tout profiler, j'ai trouvé sans ramification étaient beaucoup plus rapides, opération par opération, car l'unité centrale pouvait mieux prévoir le chemin du code et exécuter plus d'opérations en tandem. Il y a cependant environ 50 % de travail en moins dans l'instruction de branchement.
Si cela avait été Python, j'aurais écrit
if [a, b, c, d].count(True) == 3:
Ou
if [a, b, c, d].count(False) == 1:
Ou
if [a, b, c, d].count(False) == True:
# In Python True == 1 and False == 0
Ou
print [a, b, c, d].count(0) == 1
Ou
print [a, b, c, d].count(1) == 3
Ou
if a + b + c + d == 3:
Ou
if sum([a, b, c, d]) == 3:
Tout cela fonctionne, puisque les booléens sont des sous-classes des entiers en Python.
if len(filter(bool, [a, b, c, d])) == 3:
Ou, inspiré par ceci bon truc ,
data = iter([a, b, c, d])
if not all(data) and all(data):
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.