Python : algo pour convertir nbre en binaire [Fermé]

Signaler
-
Messages postés
1
Date d'inscription
mercredi 26 février 2014
Statut
Membre
Dernière intervention
26 février 2014
-
Bonjour,
Je travaille sur un petit script en python qui permettrait de convertir un nombre saisi en binaire. Par exemple, si on saisit 10 : cela renvoi 1010, ou encore 17 : 10001

Mais il y a quelques bugs... Si quelqu'un pouvait m'aider, voila mon code :
def puissance(x) :
	produit = 1
	while x!= 0 :
		produit = produit * 2
		x = x - 1
	return produit

def rang_max_func (number) :
        rang_max = 0
        boolean =  True
        while boolean == True :
                if number > expo[rang_max] :
                        rang_max += 1
                if number < expo[rang_max] :
                        boolean = False
                        rang_max -= 1
        return rang_max

def remplissage () :
        i = 0
        while (i<50) :
                test = puissance(i) 
                expo.append(test)
                i += 1

rang_max = i = size = 0
expo = converti = list()

# ----------------------------------------------------------------------------

number = int (input("Entrez le nombre à convertir en binaire : "))
remplissage()
if number == 0 :
        print ("Le nombre converti en binaire vaut : 0")
else :
        rang_max = rang_max_func (number)
        print (rang_max)
        size = rang_max
        converti.append(1)
        number = number - expo[rang_max]
        while rang_max != -1 :
                rang_max -= 1
                if number - expo[rang_max] >= 0 :
                        converti.append(20)
                if number - expo[rang_max] < 0 :
                        converti.append(10)
        number = number - expo[rang_max]

        print("Le nombre vaut donc " +str(number), " et en binaire : ")
        
        print(converti[2])
                
       


Merci d'avance

3 réponses

Messages postés
1
Date d'inscription
mercredi 26 février 2014
Statut
Membre
Dernière intervention
26 février 2014
12
pour ta question . j ai pu trouver une solution assez simple :
11
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 60511 internautes nous ont dit merci ce mois-ci

Messages postés
15
Date d'inscription
samedi 8 septembre 2012
Statut
Membre
Dernière intervention
11 juin 2015
1
Utilise seulement la fonction bin() disponible depuis python version 2.6:
bin(x)

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.
bin(17) --> '0b10001'
bin (17)[2:] --> '10001'
Merci pour ta reponse, mais j'aimerai créer l'algo par moi - meme :/
Messages postés
45
Date d'inscription
mercredi 2 mars 2005
Statut
Membre
Dernière intervention
20 janvier 2019
8
Bonsoir,

Connais-tu la récursion ?
Ce serait plus pratique
Messages postés
45
Date d'inscription
mercredi 2 mars 2005
Statut
Membre
Dernière intervention
20 janvier 2019
8
Parce-que ton code est très complexe pour ce que tu souhaites faire, plein de choses inutiles
Messages postés
45
Date d'inscription
mercredi 2 mars 2005
Statut
Membre
Dernière intervention
20 janvier 2019
8
En utilisant la récursion :
def f(n):
	L = []
	if n==1:
		return [1]
	else:
		q=n/2
		r=n%2
		L = L + f(q) + [r]
		return L
Oula non, tu peux m'expliquer vite fait? merci :)
Messages postés
45
Date d'inscription
mercredi 2 mars 2005
Statut
Membre
Dernière intervention
20 janvier 2019
8
La récursivité, c'est quand la fonction s'appelle elle-même, mais à un niveau inférieur.

Un exemple simple, le calcul de la factorielle : n! = n*(n-1)*(n-2)*...*2*1, par exemple, 5! = 5*4*3*2*1 = 120.
On peut dire que n! = n*[(n-1)!]. Dans l'exemple, 5! = 5 * 4!.

Si on appelle fact(n) la fonction qui calcule n!, on peut donc dire que fact(n) = n*fact(n-1).

Par contre, important, il faut aussi définir un cas de base. Pour la factorielle, il faut dire que fact(1)=1.

Ainsi, la fonction fact(n) est :
Si n=1, Alors retourner 1
Sinon, retourner n*fact(n-1)

En python :
def fact(n):  
 if n==1:  
  return 1  
 else:  
  return n*fact(n-1)


Le cas de base est quand n==1, et l'appel au niveau inférieur c'est fact(n-1).
Le cas de base est indispensable, sinon la fonction va s'appeler à l'infini.

As-tu bien compris ce mécanisme ? C'est la base pour comprendre le code pour l'écriture en binaire.