[Python] Problème avec une fonction

Fermé
kilian Messages postés 8732 Date d'inscription vendredi 19 septembre 2003 Statut Modérateur Dernière intervention 5 février 2025 - 1 nov. 2004 à 11:21
kilian Messages postés 8732 Date d'inscription vendredi 19 septembre 2003 Statut Modérateur Dernière intervention 5 février 2025 - 5 avril 2008 à 16:14
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 vendredi 19 septembre 2003 Statut Modérateur Dernière intervention 5 février 2025 1 526
2 nov. 2004 à 12:58
Up!
:-)

Kilian, débutant en tâche de fond.....
0
sebsauvage Messages postés 32893 Date d'inscription mercredi 29 août 2001 Statut Modérateur Dernière intervention 21 octobre 2019 15 662
2 nov. 2004 à 16:11
    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 vendredi 19 septembre 2003 Statut Modérateur Dernière intervention 5 février 2025 1 526
2 nov. 2004 à 18:42
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 mercredi 29 août 2001 Statut Modérateur Dernière intervention 21 octobre 2019 15 662
2 nov. 2004 à 18:47
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 vendredi 19 septembre 2003 Statut Modérateur Dernière intervention 5 février 2025 1 526
2 nov. 2004 à 19:06
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
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 vendredi 19 septembre 2003 Statut Modérateur Dernière intervention 5 février 2025 1 526
5 avril 2008 à 16:14
Salut,

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