[Python] Problème avec une fonction

kilian Messages postés 8732 Date d'inscription   Statut Modérateur Dernière intervention   -  
kilian Messages postés 8732 Date d'inscription   Statut Modérateur Dernière intervention   -
Bonjour,

J'ai voulu écrire une fonction qui convertit les nombres entiers de base 2 à leur base10. Seulement j'ai un problème.

Le nombre binaire entré par l'utilisateur est reçu comme étant une chaine de caractère. Je le retranscris ensuite à l'envers dans une liste puis je transforme chaque 0 et 1 de la liste en entiers. Et la je fais sur chacun l'opération d'addition avec une puissance de deux etc.....
Voici le code de la fonction:
def debinarisateur(base2):

    resultat=0
    base2_inverse=[]
    compteur=len(base2)-1
    

    while compteur>0:
        base2_inverse.append(base2[compteur])
        compteur=compteur-1

    
    compteur2=1
    compteur=0
    for chiffre in base2_inverse:
        int(chiffre)

    while compteur2<len(base2_inverse):
        resultat=resultat+(base2_inverse[compteur2]*(2**compteur))
        compteur2=compteur2+1
        compteur=compteur+1

    print resultat    


Et voici l'erreur retournée:
resultat=resultat+(base2_inverse[compteur2]*(2**compteur))
TypeError: unsupported operand type(s) for +: 'int' and 'str'


Mais je ne comprends pas, pourtant j'ai transformé chaque élément de ma liste en entier....

Merci d'avance en tout cas....

Kilian, débutant en tâche de fond.....
A voir également:

6 réponses

kilian Messages postés 8732 Date d'inscription   Statut Modérateur Dernière intervention   1 526
 
Up!
:-)

Kilian, débutant en tâche de fond.....
0
sebsauvage Messages postés 32893 Date d'inscription   Statut Modérateur Dernière intervention   15 662
 
    for chiffre in base2_inverse:
        int(chiffre)


ça convertis chiffre en entier... puis jette le résultat à la poubelle !
(Tu n'a affecté le résultat à rien.)


Il faudrait faire:
for i in range(len(base2_inverse)):
    base2_inverse[i] = int(base2_inverse[i])


ou encore, d'une façon plus pythonique:
base2_inverse = [int(i) for i in base2_inverse]


(Ce qui signifie: construire une nouvelle liste en prenant int(i) pour chaque élément i de la liste base2_inverse)
0
kilian Messages postés 8732 Date d'inscription   Statut Modérateur Dernière intervention   1 526
 
Magnifique, ça marche. J'ai donc pris ta façon "pythonique", je l'ai trouvée plus sympa, je ne savais pas qu'on pouvais mettre des instructions entre les crochets au moment de l'affectation d'une liste.

Merci beaucoup :-)

PS: Petite erreur sur mon script également : écrire compteur2=0 au lieu de 1.

Kilian, débutant en tâche de fond.....
0
sebsauvage Messages postés 32893 Date d'inscription   Statut Modérateur Dernière intervention   15 662
 
A propos, pour convertir un nombre binaire en entier, il y a une méthode toute simple:
>>> print int('1011010',2)
90

et hop !... :)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
kilian Messages postés 8732 Date d'inscription   Statut Modérateur Dernière intervention   1 526
 
Loool....

Ca m'etonne pas, remarque. Mon but c'était surtout de retranscrire dans un petit script les conversions que je viens d'apprendre en cours d'info. Pour le fun....

Merci pour l'astuce :-)

Kilian, débutant en tâche de fond.....
0
bulgom
 
salu g un probleme avec le bluetooth de mon ordi<acer extensa 5620z>quand je enclanche le bouton bluetooth,ca me marque<<aucun dispositif de bluetooth>>.merci de me doner la solution car je rame depuis une semaine,sans avoir trouver !merci
0
kilian Messages postés 8732 Date d'inscription   Statut Modérateur Dernière intervention   1 526
 
Salut,

Pour un nouveau problème il est mieux de créer un nouveau sujet.
0