Partage
  • Partager sur Facebook
  • Partager sur Twitter

[Python] Algo pour convertir un nombre binaire en décimal

Sujet résolu
11 novembre 2011 à 17:35:38

Bonsoir à tous, je suis en pleine apprentissage du langage python, je m'attaquais à quelques algo de base tel que des convertion de décimal-> binaire, binaire-> décimal...

J'ai réussi a faire l'algo décimal->binaire

a_2=""
a_10c = input("Nombre décimal à transposer :")
a_10 = int(a_10c)
while a_10 != 0 :
   r=a_10%2 #permet d'avoir le reste de la division
   a_2= str(r)+a_2 #permet de concaténer les deux chaines
   a_10=a_10//2
   
 
print(a_10c, " base 10 =", a_2, " base 2")


A présent et cela fait déjà plusieurs jours que je suis sur le convertisseur binaire -> décimal mais impossible de le finir... (impossible de trouver la solution à ce problème)

Pourriez vous m'expliquer comment en faire un, que je ne reste pas bloqué à cette si petite étape.

Je vous en remercie d'avance.

Cordialement, Eole92.

  • Partager sur Facebook
  • Partager sur Twitter
Anonyme
11 novembre 2011 à 17:37:53

Voici un algo pour t'éclairer

  • Partager sur Facebook
  • Partager sur Twitter
11 novembre 2011 à 18:03:36

Bonsoir et merci pour ta réponse, effectivement ton site est fort utile concernant les algo, mais je ne vois pas le rapprochement avec un langage python.

Les explications donné par ton lien renvoi sur un algo en C (du moins pour ma part, quand je vois ces explications, je sais les éxécuter en C mais non en python...).

Concernant l'algo en python j'avais pensais à faire quelque chose du style :
a_10=""
a_2c = input("Nombre binaire à transposer :")
a_2 = int(a_2c)
while a_2 != 0 :
   chaine= "1248"
   chaine[0] == '1', chaine[1] == '2', chaine[2] == '4', chaine[3] == '8', 
   len(chaine)

print(a_2c, " base 2 =", a_10, " base 10")


voici mon idée je suis passé par la variable chaîne en considérant celle ci comme un tableau, et len(chaine) qui renvoie à la longueur de ce "tableau"...
Malheureusement je suis toujours bloqué et je ne vois pas d'issu à mon problème.

Merci d'avance pour votre aide
  • Partager sur Facebook
  • Partager sur Twitter
11 novembre 2011 à 18:15:33

Citation : eole92

je suis en pleine apprentissage du langage python, je m'attaquais à quelques algo de base tel que des convertion de décimal-> binaire, binaire-> décimal...



Python est un langage de haut niveau et si ton but est d'apprendre Python, il ne paraît pas judicieux de s'entraîner avec ce genre d'algorithme. Python te permet nativement de faire ces conversions :

candide@~$ python3.2
>>> bin(42)
'0b101010'
>>> int('101010',2)
42
>>>






Citation : eole92


Pourriez vous m'expliquer comment en faire un, que je ne reste pas bloqué à cette si petite étape.



Tu as fait le plus dur : convertir vers la base 10 est facile.



>>> n="101010"
>>> sum([2**i*int(n[::-1][i]) for i in range(len(n))])
42
>>>
  • Partager sur Facebook
  • Partager sur Twitter
Anonyme
11 novembre 2011 à 18:18:38

Citation

Bonsoir et merci pour ta réponse, effectivement ton site est fort utile concernant les algo, mais je ne vois pas le rapprochement avec un langage python



Un algorithme est utile pour tout type de langage, c'est la façon de faire te permettant d'arriver au résultat.

Maintenant si tu veux simplement utiliser la force de python,

int("00100111", 2)


Edit : grilled by Candide
  • Partager sur Facebook
  • Partager sur Twitter
11 novembre 2011 à 18:27:47

Bonsoir et merci pour vos réponses,

j'ai donc abandonner mon idée de passer par les variables chaine et len, même si j'aurai bien voulu savoir le faire :)
Comme a dit candide, python est un langage de haut niveau...Bien que j'en aurai besoin pour l'année prochaine (car je souhaite faire un BTS informatique)
  • Partager sur Facebook
  • Partager sur Twitter
11 novembre 2011 à 18:29:11

Citation : eole92


Concernant l'algo en python j'avais pensais à faire quelque chose du style :

a_10=""
a_2c = input("Nombre binaire à transposer :")
a_2 = int(a_2c)
while a_2 != 0 :
   chaine= "1248"
   chaine[0] == '1', chaine[1] == '2', chaine[2] == '4', chaine[3] == '8', 
   len(chaine)

print(a_2c, " base 2 =", a_10, " base 10")






Quand je vois ce genre de code, je me dis : saurais-tu faire un code qui calcule la somme des entiers d'une liste d'entiers (sans utiliser la fonction standard sum) ? Pour en revenir à ton choix de faire des conversions de bases, apprendre un langage en s'entraînant avec des algorithmes mathématiques ne me paraît pas une bonne idée.
  • Partager sur Facebook
  • Partager sur Twitter
Anonyme
11 novembre 2011 à 18:30:20

Citation

j'ai donc abandonner mon idée de passer par les variables chaine et len, même si j'aurai bien voulu savoir le faire



Mieux vaut ne pas abandonner, surtout si tu veux faire info par la suite.

  • Partager sur Facebook
  • Partager sur Twitter
11 novembre 2011 à 18:49:51

Citation : candide

Quand je vois ce genre de code, je me dis : saurais-tu faire un code qui calcule la somme des entiers d'une liste d'entiers (sans utiliser la fonction standard sum) ?



Je vais tenter de faire ce que tu me dis on verra bien :)

Citation : candide

Pour en revenir à ton choix de faire des conversions de bases, apprendre un langage en s'entraînant avec des algorithmes mathématiques ne me paraît pas une bonne idée.



Pour apprendre le python, je me sert de tout ce que je trouve, cours, tuto, explication d'algo...
J'aime tout ce qui est informatique et plus particulièrement ce qui est développement et codage, c'est pour cela que j'en fait en ce moment, pour avoir la main l'année prochaine.




Citation : fred1599

Citation

j'ai donc abandonner mon idée de passer par les variables chaine et len, même si j'aurai bien voulu savoir le faire



Mieux vaut ne pas abandonner, surtout si tu veux faire info par la suite.



Je n'ai pas abandonne le projet de faire cette algo, j'ai juste pense a plus simple :)
  • Partager sur Facebook
  • Partager sur Twitter
Anonyme
11 novembre 2011 à 18:57:40

Citation

Je n'ai pas abandonne le projet de faire cette algo, j'ai juste pense a plus simple



L'essentiel est qu'il soit fonctionnel, que tu puisses le terminer, que le résultat attendu soit là.

Par la suite ton code sera une base améliorable en vitesse, lisibilité, etc...

Mais quand je vois ton code, je suppose que tu voulais travailler avec des indices et dans ce cas il faut continuer de travailler avec des chaînes de caractères.

Dans ton cas, il sera plus simple d'indiquer sur le forum ton algo et ensuite de le traduire en python, on pourra plus facilement t'expliquer l'adéquation entre les 2 formes.
  • Partager sur Facebook
  • Partager sur Twitter
14 novembre 2013 à 19:01:24

Salut salut, desolé du méga up de 2ans, mais je suis tombé ici par hasard et je vous propose ma solution avec explication, je pense que c'est un peu un problême recurant

#Converti une liste en binaire vers un nombre décimal
def convertBinaire(binaire):
    # La valeur en base de 10 du nombre binaire
    nombre = 0;
    
    # La longueur de la liste binaire, [1, 0] renvoie 2.
    longueur = len(binaire)


    for i in range(0, longueur):
        if(binaire[i] != 0 and binaire[i] != 1):
            nombre = 0;
            break;
        nombre += binaire[longueur - 1 - i] * (2**i)

    return nombre;
nombre += binaire[longueur - 1 - i] * (2**i)

Exemple concret:

'1001' en binaire, est égal à : ' 1 * 2^0 + 0 * 2^1 + 0 * 2^2 + 1 * 2^3

soit 9. C'est comme cela qu fonctionne le binaire, c'est un peu sous forme de suite ^^ (ceci a valu des recherches papiers).

Le soucis de ma méthode c'est que sa passe par une liste, à vous de voir apres pour convertir une chaine de caracteres ou un nombre en liste ^^

-
Edité par rpereira 14 novembre 2013 à 19:02:35

  • Partager sur Facebook
  • Partager sur Twitter
1 décembre 2013 à 12:31:30

rpereira

l'as très bien dis il y a possibilité de passer par une suite mais si tu voulais rester sur ton idée de chaîne de caractère je t offre mon programme il peut être améliorer et c'est un peu tard mais pour les autres internautes .....

voila mon programme:

# Conversion d'un nombre binaire sous forme de chaine de caractère vers

#un nombre décimal.

def Bindec (nbbin) :

    """Entrez une chaîne de caractères"""

    #Déclaration et initialisation de la valeur de retour

    nbdec=0

    for i in range (len(nbbin)):

        nbdec+=int((nbbin[len(nbbin)-(i+1)]))*(2**i) 

    return nbdec

voila et désolé pour la mise en page je ne savais pas faire autrement

  • Partager sur Facebook
  • Partager sur Twitter
21 avril 2014 à 10:29:44

candide a écrit:

Citation : eole92


Concernant l'algo en python j'avais pensais à faire quelque chose du style :

a_10=""
a_2c = input("Nombre binaire à transposer :")
a_2 = int(a_2c)
while a_2 != 0 :
   chaine= "1248"
   chaine[0] == '1', chaine[1] == '2', chaine[2] == '4', chaine[3] == '8', 
   len(chaine)

print(a_2c, " base 2 =", a_10, " base 10")






Quand je vois ce genre de code, je me dis : saurais-tu faire un code qui calcule la somme des entiers d'une liste d'entiers (sans utiliser la fonction standard sum) ? Pour en revenir à ton choix de faire des conversions de bases, apprendre un langage en s'entraînant avec des algorithmes mathématiques ne me paraît pas une bonne idée.


et si on demande pour la conversion decimale -> binaire de 0 ? 

  • Partager sur Facebook
  • Partager sur Twitter
18 septembre 2019 à 18:27:35

moi perso j ai fait ça :

n=int(input('saisissez un nombre')) #demande à l utilisateur de saisir un nombre
resultat=0 #définit une variable resultat et lui donne la valeur 0
nchaine=str(n) #définit une variable nchaine qui converit le nombre saisit en chaine de caractères
nliste=list(nchaine) #définit une variable nliste qui convertit la chaine de caractaire en liste
pgexposant=len(nliste) #définit une variable pgexposant qui compte le nombre de caractères dans la liste
for i in range(pgexposant): #repéte cette boucle pgexposant fois
    int(i) #définit i comme etant un nombre entier
    ajout=int(nliste[i])*2**(pgexposant-1-i) #définit une variable ajout qui est égale à la iéme valeur de la liste de caractères fois 2 puissance pgexposant -1 - le nombre de fois que la boucle a été jouée
    resultat=resultat+ajout #à chaque boucle la variable resultat est égale a la variable ajout + la variable reslultat
print(n,'en nombre binaire vaut',resultat,'en nombre décimal') #renvoit le nombre convertit en decimal


l

  • Partager sur Facebook
  • Partager sur Twitter

143f38ef8e977c44d9f442e8d47ae306

23 octobre 2020 à 17:44:37 - Message modéré pour le motif suivant : Message complètement hors sujet


23 octobre 2020 à 18:12:10

Bonjour,

Déterrage

Citation des règles générales du forum :

Avant de poster un message, vérifiez la date du sujet dans lequel vous comptiez intervenir.

Si le dernier message sur le sujet date de plus de deux mois, mieux vaut ne pas répondre.
En effet, le déterrage d'un sujet nuit au bon fonctionnement du forum, et l'informatique pouvant grandement changer en quelques mois il n'est donc que rarement pertinent de déterrer un vieux sujet.

Au lieu de déterrer un sujet il est préférable :

  • soit de contacter directement le membre voulu par messagerie privée en cliquant sur son pseudonyme pour accéder à sa page profil, puis sur le lien "Ecrire un message"
  • soit de créer un nouveau sujet décrivant votre propre contexte
  • ne pas répondre à un déterrage et le signaler à la modération

Je ferme ce sujet. En cas de désaccord, me contacter par MP.

  • Partager sur Facebook
  • Partager sur Twitter