Binaire vers décimal Python
Salut,
Je veux coder une fonction dans Sage qui prend une liste (de 0 et 1) en entrée et retourne le nombre en décimal.
Voici mon code
Mathématiquement ça doit être bon (j'espère), sauf que quand je teste sur n'importe quelle liste ça me renvoie... 1!
BinDec([1,0,1]) = 1...
Je ne comprends pas absolument pas pourquoi...
Si quelqu'un peut m'aider, merci !
Je veux coder une fonction dans Sage qui prend une liste (de 0 et 1) en entrée et retourne le nombre en décimal.
Voici mon code
def BinDec (b) : n=0 for i in range (len(b)): n=n+b[len(b)-(i+1)]*(2^i) return n
Mathématiquement ça doit être bon (j'espère), sauf que quand je teste sur n'importe quelle liste ça me renvoie... 1!
BinDec([1,0,1]) = 1...
Je ne comprends pas absolument pas pourquoi...
Si quelqu'un peut m'aider, merci !
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
En Python, et Sage fait du python $0b11111100001$ donne $2017$.
Cordialement,
Rescassol
Sinon, int("".join(map(str,b)),2) devrait fonctionner.
-- Schnoebelen, Philippe
En particulier, Sage est aussi sensé transformer ^ en ** sur les entiers (le ^ en Python entre les entiers correspond au "et bit à bit" et non à la puissance). Le code que tu as posté ici Grayford doit normalement fonctionner sous Sage mais pas sous Python.
Je précise : je suis bien avec Sage, désolé si cela vous a gêné mais je pensais que Python était ce que Sage utilisait (entre autre).
Et ma fonction prend en entrée une liste (c'est imposé par une autre fonction), je ne peux donc pas convertir directement avec int("".join(map(str,b)),2) (si j'ai bien compris...)
Quant à 0b11110001, c'est 0b la fonction ?
Quelqu'un peut-il copier-coller voir si cela vient de chez moi ?
Merci.
Cela dit, tu peux coder ta fonction ainsi :
-- Schnoebelen, Philippe