Salut,
En écrivant:
1 2 3 4 5 6 7 8 9
| >>> b = '0101'
>>> for i in b:
... print(i, type(i))
...
0 <class 'str'>
1 <class 'str'>
0 <class 'str'>
1 <class 'str'>
>>> |
La boucle "for" va itérer sur les caractères de la chaîne "b".
Vous obtenez des chaînes de caractères de longueur 1.
Le soucis est quand vous allez faire "+1":
1 2 3 4 5
| >>> b[1] + 1
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: Can't convert 'int' object to str implicitly
>>> |
Python est gentil mais, il y a des limites!
Un nombre en base 2 s'écrit: n = c0*2^0 + c1*2^1 + c2*2^2 + ... où les "ci" sont les 0 et 1 de la représentation binaire.
Votre code:
nbr_decimal += int(nbr_binaire(len(nbr_binaire)-(i+1))*(2**i))
est illisible et donc probablement faux.
Partons de:
1 2 3
| >>> b
'1010'
>>> nd = 0 # le résultat à l'étape n-1 |
"nd" est la valeur calculée jusqu'au(n-1)ième digit de la représentation (inversée).
*note* vous pourriez partir des digits de poids fort, mais comme vous avez écrit:
1 2
| indice = 0
nbr_binaire = nbr_binaire[::-1] # Retourne le nombre binaire |
Je suppose que vous partez des digits de poids faible.
Pour calculer l'itération "n", on part de n, la position et c le digit en cette position, d'où:
Il vous reste à mettre cela en forme.
- W
Partager