CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

[Python] Convertir des nombres décimaux en binaire.

Obvious-Sir
Obvious-Sir
Niveau 10
11 juillet 2016 à 09:37:34

Salut ! J'ai essayé de créer un fichier .py afin de convertir des nombres décimaux {Pour l'instant compris entre 0 et 31}. Cependant, il ne fonctionne pas.
Pourriez-vous m'aider ?

Mon code :

print("Decimal to Binary")
print("Nombres acceptés : 0 - ... - 31")
invite = "Propose un Nombre, et il sera converti en binaire : "
while True :
decimal = raw_input(invite)
if decimal == 0:
print("0-0-0-0-0")
elif decimal == 1:
print("0-0-0-0-1")
elif decimal == 2:
print("0-0-0-1-0")
elif decimal == 3:
print("0-0-0-1-1")
elif decimal == 4:
print("0-0-1-0-0")
elif decimal == 5:
print("0-0-1-0-1")
elif decimal == 6:
print("0-0-1-1-0")
elif decimal == 7:
print("0-0-1-1-1")
elif decimal == 8:
print("0-1-0-0-0")
elif decimal == 9:
print("0-1-0-0-1")
elif decimal == 10:
print("0-1-0-1-0")
elif decimal == 11:
print("0-1-0-1-1")
elif decimal == 12:
print("0-1-1-0-0")
elif decimal == 13:
print("0-1-1-0-1")
elif decimal == 14:
print("0-1-1-1-0")
elif decimal == 15:
print("0-1-1-1-1")
elif decimal == 16:
print("1-0-0-0-0")
elif decimal == 17:
print("1-0-0-0-1")
elif decimal == 18:
print("1-0-0-1-0")
elif decimal == 19:
print("1-0-0-1-1")
elif decimal == 20:
print("1-0-1-0-0")
elif decimal == 21:
print("1-0-1-0-1")
elif decimal == 22:
print("1-0-1-1-0")
elif decimal == 23:
print("1-0-1-1-1")
elif decimal == 24:
print("1-1-0-0-0")
elif decimal == 25:
print("1-1-0-0-1")
elif decimal == 26:
print("1-1-0-1-0")
elif decimal == 27:
print("1-1-0-1-1")
elif decimal == 28:
print("1-1-1-0-0")
elif decimal == 29:
print("1-1-1-0-1")
elif decimal == 30:
print("1-1-1-1-0")
elif decimal == 31:
print("1-1-1-1-1")

Message édité le 11 juillet 2016 à 09:38:22 par Obvious-Sir
dark_drow
dark_drow
Niveau 15
11 juillet 2016 à 09:55:23

j'espere que c'est une blague :mort:

Obvious-Sir
Obvious-Sir
Niveau 10
11 juillet 2016 à 10:01:11

Nope, je débute. ( Ceci n'est pas un troll, vraiment )

tazukay
tazukay
Niveau 10
11 juillet 2016 à 10:17:40

Je ne sais pas si l'énoncé est de toi, mais au vu de ta longue chaine de if elif, tu ne penses pas qu'il est existe un truc pour convertir réellement ? :o))
Si tu trouves pas dis le

Bunyan
Bunyan
Niveau 17
11 juillet 2016 à 10:17:41

Alors, en informatique, on ne raisonne jamais ainsi ^^

On pose le problème, on réfléchit dessus pour le factoriser le plus possible, et si possible utiliser ds propriétés/algo/formules pour les conversions.
On ne fait pas de "cas par cas" aussi fin (et si on doit le faire, c'est bien qu'on est bloqué et qu'on ne peut pas faire autrement :'( ).

Ici, tu souhaites transformer du décimal en binaire.
Outre le fait que je suis persuadé que le Python gère déjà ce genre de transformation nativement, je vais partir sur l'exercice, donc recréer la transformation.

Donc, pour passer de notre cher base 10 (notre base de comptage de référence) en base 2 (binaire), tu as plusieurs manières, plus ou moins mathématiques.

Essaie de faire la plus simple, la "bête et méchante".
Chaque rang de la représentation binaire représente une puissance de 2.
Partant de là, il te suffit de :

  1. calculer la plus grande puissance de 2 inférieure à ta valeur à transformer
  2. soustraire cette puissance à ta valeur
  3. recommencer jusqu'à arriver à 0

Tu as bien d'autres manières de le faire, la bête et méchante étant la plus intuitive, mais pas la plus simple, ni la plus performante.

GrandeGuerre
GrandeGuerre
Niveau 11
11 juillet 2016 à 10:17:42

L'intérêt d'un langage c'est justement d'éviter d'avoir à gérer toutes les solutions "à la main". :oui:

http://stackoverflow.com/questions/3528146/convert-decimal-to-binary-in-python

Si tu veux vraiment faire ça par toi même alors faut comprendre comment tu passes de décimal à binaire mathématiquement. Et baser ton algorithme dessus.

Obvious-Sir
Obvious-Sir
Niveau 10
11 juillet 2016 à 11:08:21

Merci bien :)

GrandeGuerre
GrandeGuerre
Niveau 11
11 juillet 2016 à 11:24:04

3 réponses en 3 secondes, on a fait fort... Je croyais que je ne savais plus lire !

Obvious-Sir
Obvious-Sir
Niveau 10
11 juillet 2016 à 11:39:38

:))

Obvious-Sir
Obvious-Sir
Niveau 10
11 juillet 2016 à 12:49:47

J'ai refait le code, avec l'astuce de GG.
Ce qui me donne :

print("Decimal to Binary")
print("Nombres acceptés : 0 - ... - 31")
invite = "Propose un Nombre, et il sera converti en binaire : "
while True :
decimal == raw_input(invite)
if decimal == 0:
print("La valeur choisie est : "+str(decimal))
bin(0)
elif decimal == 1:
print("La valeur choisie est : "+str(decimal))
bin(1)
elif decimal == 2:
print("La valeur choisie est : "+str(decimal))
bin(2)
elif decimal == 3:
print("La valeur choisie est : "+str(decimal))
bin(3)
elif decimal == 4:
print("La valeur choisie est : "+str(decimal))
bin(4)
elif decimal == 5:
print("La valeur choisie est : "+str(decimal))
bin(5)
elif decimal == 6:
print("La valeur choisie est : "+str(decimal))
bin(6)
elif decimal == 7:
print("La valeur choisie est : "+str(decimal))
bin(7)
elif decimal == 8:
print("La valeur choisie est : "+str(decimal))
bin(8)
elif decimal == 9:
print("La valeur choisie est : "+str(decimal))
bin(9)
elif decimal == 10:
print("La valeur choisie est : "+str(decimal))
bin(10)
elif decimal == 11:
print("La valeur choisie est : "+str(decimal))
bin(11)
elif decimal == 12:
print("La valeur choisie est : "+str(decimal))
bin(12)
elif decimal == 13:
print("La valeur choisie est : "+str(decimal))
bin(13)
elif decimal == 14:
print("La valeur choisie est : "+str(decimal))
bin(14)
elif decimal == 15:
print("La valeur choisie est : "+str(decimal))
bin(15)
elif decimal == 16:
print("La valeur choisie est : "+str(decimal))
bin(16)
elif decimal == 17:
print("La valeur choisie est : "+str(decimal))
bin(17)
elif decimal == 18:
print("La valeur choisie est : "+str(decimal))
bin(18)
elif decimal == 19:
print("La valeur choisie est : "+str(decimal))
bin(19)
elif decimal == 20:
print("La valeur choisie est : "+str(decimal))
bin(20)
elif decimal == 21:
print("La valeur choisie est : "+str(decimal))
bin(21)
elif decimal == 22:
print("La valeur choisie est : "+str(decimal))
bin(22)
elif decimal == 23:
print("La valeur choisie est : "+str(decimal))
bin(23)
elif decimal == 24:
print("La valeur choisie est : "+str(decimal))
bin(24)
elif decimal == 25:
print("La valeur choisie est : "+str(decimal))
bin(25)
elif decimal == 26:
print("La valeur choisie est : "+str(decimal))
bin(26)
elif decimal == 27:
print("La valeur choisie est : "+str(decimal))
bin(27)
elif decimal == 28:
print("La valeur choisie est : "+str(decimal))
bin(28)
elif decimal == 29:
print("La valeur choisie est : "+str(decimal))
bin(29)
elif decimal == 30:
print("La valeur choisie est : "+str(decimal))
bin(30)
elif decimal == 31:
print("La valeur choisie est : "+str(decimal))
bin(31)

Si je le lance sous IDLE, il me renvoie ce message :
Traceback (most recent call last):
File "C:\Users\******\Desktop\python\BinaryDecimal 31.py", line 5, in <module>
decimal == raw_input(invite)
NameError: name 'decimal' is not defined

Pourriez-vous m'aider, à nouveau ?

GrandeGuerre
GrandeGuerre
Niveau 11
11 juillet 2016 à 13:36:34

Je pense qu'il te manque une part de la logique car là, le code est réellement mauvais. Sans méchanceté, vraiment, mais t'es pas sur la bonne voie. :(

Vu qu'on se croise de temps en temps tu peux me MP si jamais tu veux quelques conseils pour débuter. :oui:

Obvious-Sir
Obvious-Sir
Niveau 10
11 juillet 2016 à 13:46:13

Non, t'inquiètes pas :) J'débute, tu sais :clown:

Obvious-Sir
Obvious-Sir
Niveau 10
11 juillet 2016 à 13:46:36

Sinon, merci pour les MP :)

Candystand
Candystand
Niveau 10
11 juillet 2016 à 13:55:56

Oulah ne penses-tu pas qu'il y a beaucoup plus simple qu'une forêt de if/else if ? Imagine que tu doive gérer par exemple les nombres entre 0 et 1000, tu vas pas faire 1000 fois la même ligne.

Dans ton code il y a quand même des lignes qui se ressemblent à une exception près:

print("La valeur choisie est : "+str(decimal))
bin(31)

Par exemple ici, 31 est bien la valeur contenue dans decimal. Du coup pourquoi ne pas faire tout simplement :

print("Decimal to Binary")
print("Nombres acceptés : 0 - ... - 31")
invite = "Propose un Nombre, et il sera converti en binaire : "
while True :
decimal == raw_input(invite)
print("La valeur choisie est : "+str(decimal))
bin(decimal)

là tout de suite ton code est factorisé et peut gérer n'importe quel entier (en supposant qu'on entre bien un entier). Maintenant, un autre soucis: quand on regarde la doc de python concernant la fonction bin:

Convert an integer number to a binary string. The result is a valid Python expression. If x is not a Python int object, it has to define an __index__() method that returns an integer.

On peut retenir ici que la fonction bin retourne un binary string. Or ici, tu appelles la fonction, mais tu n'en fais rien. Du coup si tu veux afficher ce que renvoie la fonction, tu as juste à remplacer la ligne

bin(decimal)

par

print(bin(decimal).decode("ascii"))

Le decode transforme ton binary string en string normal

Et là ton code est fonctionnel :)

Message édité le 11 juillet 2016 à 13:57:23 par Candystand
Obvious-Sir
Obvious-Sir
Niveau 10
11 juillet 2016 à 17:19:08

Merci beaucoup ! Je pensais pas pouvoir mettre une variable dans le bin.

Lidl_is_Life
Lidl_is_Life
Niveau 7
13 juillet 2016 à 02:55:46

As tu déjà fais des cours d'algo auparavant ? Si non, tu devrai en faire ca devrait t'aider [[sticker:p/1kki]]

Et aussi quand tu décide de faire un programme, réfléchis comment tu vas le faire [[sticker:p/1kki]]

Obvious-Sir
Obvious-Sir
Niveau 10
13 juillet 2016 à 08:57:46

Merci du conseil !

Sous forums
  • Aide à l'achat Mac
  • Création de Jeux
  • Linux
  • Création de sites web
  • Programmation
  • Internet
  • Steam Deck
  • Macintosh
  • Hardware