La question est:
Composez une fonction odd () qui prend trois bool arguments et retourne True si un nombre impair d'arguments est True, et False sinon.

Par exemple, la sortie est:

>>> odd ( False , True , False )
True
>>>
>>> odd ( True , True , True )
True
>>>
>>> odd ( True , True , False )
False

C'est une question mais je ne suis pas sûr de ce que j'écris comme argument en fonction? def bool(x,y,z) est-ce vrai? Soit dit en passant, j'ai essayé une façon de résoudre cette question.

import sys

def bool(x,y,z):
    if x+y+z%2==0:
        return False
    else:
        return True

a = int(sys.argv[1])
b = int(sys.argv[2])
c = int(sys.argv[3])

m = bool(a,b,c)

print(m)

Ma façon est très mauvaise, je sais, mais je suis confus au sujet de l'argument booléen. Y a-t-il quelqu'un pour me montrer un chemin?

0
user9654395 16 avril 2018 à 19:48

2 réponses

La priorité de l'opérateur évalue {{0}} comme {{X 1}}. ce que vous voulez, c'est (x+y+z)%2. (et bool est un type intégré; vous devez appeler votre fonction autrement que cela ...)

La fonction que vous recherchez est appelée fonction de parité.

Si vous acceptez bool comme type d'entrée, vous pouvez simplement xor (^) les trois variables:

def odd(b0, b1, b2):
    return b0 ^ b1 ^ b2

Testé avec

from itertools import product

for b0, b1, b2 in product((True, False), repeat=3):
    print('odd({}, {}, {}) = {}'.format(b0, b1, b2, odd(b0, b1, b2)))

Cela pourrait être généralisé pour accepter un nombre arbitraire d'arguments:

from operator import xor
from functools import reduce

def odd(*bools):
    return reduce(xor, bools, False)
3
hiro protagonist 17 avril 2018 à 05:23

Votre approche est correcte, vous oubliez juste les parenthèses.

def odd(x, y, z):
    return bool((x + y + z)%2)

Vous pouvez facilement étendre cette fonction pour prendre un nombre arbitraire d'arguments:

def odd(*bools):
    return bool(sum(bools)%2)
3
timgeb 16 avril 2018 à 16:57