Base 2 à base 4

Fermé
Leen_05 Messages postés 1 Date d'inscription jeudi 4 juillet 2013 Statut Membre Dernière intervention 5 juillet 2013 - Modifié par Chris 94 le 5/07/2013 à 01:13
 Leen_05 - 6 juil. 2013 à 06:14
Bonjour!
Je dois faire un programme qui permet de convertir des nombres binaires en nombre de base 4 sans passer par la base 10 en python mais je suis bloquée!
Voici mon programme:

#programme base 2 à base 4:
from math import*
def b2tob4():
    l=int(input("Combien y a t-il de chiffre dans votre nombre binaire? \n"))
    binaire=[]
    binaire.append(input("Entrez le premier chiffre de votre nombre binaire: "))
    for i in range(2,l+1):
        binaire.append(input("Entrez le chiffre suivant de votre nombre binaire: "))
    print(binaire)                                  # à supprimer à la fin
    binaire.reverse()
    print(binaire)                                  # à supprimer à la fin
    for i in range(0,l):                         
        binaire[i]=binaire[i]*(2**i)                #pb: 1*2**1=2 et affiche 11, il affiche 2 fois le chiffre 1!
        i=i+1      
    print(binaire)                                  # à supprimer à la fin
    
#2^0 et 2^1 donne 4^0; 2^2 et 2^3 donne 4^1 ...
    # if 2**i <= 4:
        #2**i=4**0


Merci pour tout!
A voir également:

3 réponses

KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015
5 juil. 2013 à 09:56
Je ne parle pas Python, mais si tu représentes tes nombres par une suite de bits, la base 2 s'obtient en prenant les bits 1 à 1, et la base 4 en les prenant 2 à 2.

Exemple :

base 2 = 10110001 = 1 0 1 1 0 0 0 1
base 4 = 10 11 00 01 = 2301
4
Merci beaucoup pour vos reponse je vais essayer ça tout de suite! :)
1
Merciiiii grâce à vous j'ai réussi!! Maintenant il faut que j'en fasse un mais de la base 4 à la base 2 sans passer par la base 10! Donc je me remet au boulot et si j'ai du soucis et bien je sais où chercher de l'aide!
0
Oui c'est super simple il suffit de regrouper les bits par deux, pas besoin de passer par la base 10 donc.
En utilisant un petit dictionnaire voici ce que çà donne ( cette méthode ne marche qu'avec les nombres binaires entiers ) :

def tobase4 ( n, result = '' ) :
    if ( len ( n ) % 2 == 1 ) : n = '0' + n
    converter = { '00' : '0', '01' : '1', '10' : '2', '11' : 3 }
    for x in xrange ( len ( n ) / 2 ) :
        result += converter [ n [ x * 2 : x * 2 + 2 ] ]
    return result
 
print tobase4 ( '1001' )
# 21 


Universale.
0