Comment cela s'exécute-t-il?évaluation des opérateurs logiques en retour statemnet en python
def f(x):
return x>0 and (x%2)+f(x/2) or 0
x
est un tableau, par exemple: [1, 1, 1, 3]
Merci.
Comment cela s'exécute-t-il?évaluation des opérateurs logiques en retour statemnet en python
def f(x):
return x>0 and (x%2)+f(x/2) or 0
x
est un tableau, par exemple: [1, 1, 1, 3]
Merci.
Voulez-vous dire cela?
$ python
Python 2.5.5 (r255:77872, Apr 21 2010, 08:40:04)
[GCC 4.4.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> def f(x):
... return x>0 and (x%2)+f(x/2) or 0
...
>>> f([1, 1, 1, 3])
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 2, in f
TypeError: unsupported operand type(s) for %: 'list' and 'int'
évaluation dans la déclaration return
ne diffère pas de l'évaluation dans tout autre lieu. si x
est une liste tout cela n'a aucun sens et soulève TypeError
. x
devrait être un numérique pour que cela fonctionne.
Si x
est un nombre, il fonctionnerait comme suit:
x>0
True
retour (x%2)+f(x/2)
partie. Ce qui, bien sûr, récursif infinimentFalse
retour 0
Ce code est cassé. Pour les débutants, x>0
est toujours vrai. Mais x%2
et x/2
donnent des erreurs de type.
La fonction compte de manière récursive le nombre de 1 dans la forme binaire du nombre x.
Chaque fois que la fonction ajoute des sommes, le bit le plus bas (1 ou 0) avec le nombre de bits d'un nombre sans le dernier bit (divisant par 2 équivaut à 1), ou 0 s'il n'y a plus morceaux.
Par exemple: La fonction retourne 2 à 5 comme une entrée (5 101 est en binaire) La fonction retourne 3 à 13 comme une entrée (13 est 1101 en binaire)
... Cela ne s'exécute pas. Vous ne pouvez pas appliquer l'opérateur de module à une liste et Python vous le dira avec une exception TypeError. – msw