Décimal en binaire
RésoluLilou -
Bonjour,
je cherche à convertir un nombre décimal entier en nombre binaire. Mais lors de l'exécution de ma fonction, il est dit que je ne pas additionner un int et un str mais ce que je ne comprends pas c'est que juste avant je mets les deux en str.
Voici mon programme :
def dec_to_bin(decimal): binaire="" quotient = decimal//2 reste = decimal%2 str(reste) binaire = reste + binaire while quotient!=0 : decimal = quotient reste = decimal% 2 binaire = reste + binaire quotient = quotient//2 while len(binaire)==4 : binaire = binaire+str(0) return binaire assert dec_to_bin(10) == '1010' assert dec_to_bin(15) == '1111' assert dec_to_bin(0) == '0000'
Et voici le message d'erreur :
Traceback (most recent call last):
File "<input>", line 24, in <module>
File "<input>", line 6, in dec_to_bin
TypeError: unsupported operand type(s) for +: 'int' and 'str'
En espérant trouver de l'aide, merci d'avance
Windows / Edge 107.0.1418.24
- Remi et safia code binaire
- Code ascii - Guide
- Code binaire - Guide
- Code puk bloqué - Guide
- Comment déverrouiller un téléphone quand on a oublié le code - Guide
- Code activation windows 10 - Guide
6 réponses
Bonjour,
str(reste) ne convertit pas reste en chaine, l'instruction crée une chaine au moment de l’exécution dont tu ne fais rien.
il faudrait au moins faire reste = str(reste), ou plus simplement binaire = str(reste) + binaire.
Enfin, avant le return tu devrais afficher binaire pour voir ce que contient la chaine.
Bonjour,
Essayez :
binaire = o en ligne 6
car quand vous déclarez binaire = "" binaire est mémorisé en type string
donc en ligne 6, vous additionnez un int et un string, d'où le message d'erreur.
Si vous aviez voulu transformer le string "reste" initial en string, il aurait fallu entrer : reste = string(reste)
La ligne doit donc être supprimée, à moins que vous vouliez concaténer le string "reste" et le string decimal (à convertir comme indiqué plus haut).
Sous réserve d'invalidation ou amélioration par un "pythoniste".
J'ai fait ça maintenant mais j'ai toujours un message d'erreur et merci de l'aide
def dec_to_bin(decimal):
binaire=""
quotient = decimal//2
reste = decimal%2
binaire = str(reste) + binaire
while quotient!=0 :
decimal = quotient
reste = decimal%2
binaire = str(reste) + binaire
quotient = quotient//2
while len(binaire)==4 :
binaire = str(0)+ binaire
print (binaire)
return binaire
assert dec_to_bin(10) == '1010'
assert dec_to_bin(15) == '1111'
assert dec_to_bin(0) == '0000'
Je ne vois pas que vous ayez écrit binaire == 0
Cela ne préjuge pas d'autres erreurs qui seront signalées par la suite mais celle-ci devait disparaître (j'ai bien entendu vérifié sur cette partie du code).
Mais l'important n'est pas de recopier ma proposition mais de comprendre ce que signifie ce message d'erreur et ce que vous faîtes pour le corriger.
Par ailleurs, il est plus que recommandé d''utiliser les balises de code (python) pour encadrer votre script (utiliser l'icone correspondante au dessus de la zone de saisie des réponses
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre questionLà ton code fonctionne, c'est l'assert qui indique une erreur car ta fonction renvoie '01010' alors que tu attend '1010'
Pourquoi rajouter 0 quand longueur = 4 ?
Après ton code est imparfait car si la valeur décimale passée est supérieure à 15 et que tu attends un binaire sur 4 bits, la réponse ne sera par correcte. Il faudrait vérifier la valeur décimale reçue, ou ne pas limiter la chaine binaire à 4 positions.
Bonjour jee pee,
Ma proposition est-elle incorrecte et lilou doit-elle maintenir la ligne 6 initiale. Je ne voudrais pas la diriger vers de fausses solutions.
edit:
Désolé de la question superflue. Je ne sais pas pourquoi, malgré le fait que j'aie vérifié avant de poster, je n'avais pas la réponse #1, que j'ai doublonnée par rapport à la tienne. Encore heureux qu'elles correspondent.
Par ailleurs, je n'ai pas la ligne 24 dans le post initial.
Je te laisse la main pour ne pas embrouiller lilou.
bonjour, je n'ai pas bien compris ce que tu voulais faire/dire ;-)
le code de lilou n'est pas optimum, long et beaucoup de variables, mais en fait, comme au final elle nous donné l'énoncé, c'est bien sur cette base qu'il faut rester. Elle doit débuter donc disons qu'obtenir le bon résultat est moins important que comprendre chaque ligne du code.