2010-11-10 18 views
3

Researching identification de motif nécessite d'identifier les motifs répétitifs dans binaires représentations de fractions des nombres rationnels. bin(2**24/n)désactive les zéros en tête, par ex. bin(2**24/11) ->0b101110100010111010001 au lieu de 0b000101110100010111010001. Le nombre de zéros en tête est bien sûr variable. Le modèle évident ici est 0001011101 ...motifs dans les fractions binaires avec python

Je suis un nubee avec Python toujours sur la courbe d'apprentissage. Existe-t-il un moyen approprié pour Python d'aborder cela?

+0

Huh? 'bin (2 ** 24/3)' est 0b10101010101010101010101 sur Python 2.x et erreur sur Python 3.x – kennytm

+0

Votre solution doit-elle être en Python? Sinon, je peux recommander plusieurs autres façons de le faire. BTW, 2^24/3 = 10101010101010101010101. (01), où (01) signifie que le 01 se répète pour toujours. –

Répondre

2

Vous trouverez peut-être le module bitstring utile si vous avez des besoins plus avancés que la mise en forme de chaîne peuvent fournir.

>>> from bitstring import BitArray 
>>> a = BitArray(24)   # 24 zero bits 
>>> a.uint = 2**24/11   # set the unsigned integer propery 
>>> a.bin      # get the binary propery 
'000101110100010111010001' 

Il ne sera jamais coupé un zéro bits, et peut faire quelques autres trucs utiles

>>> a.uint /= 2 
>>> a.bin 
'000010111010001011101000' 
>>> list(a.findall('0b1011')) 
[4, 14] 
>>> a *= 2  # concatenation 
>>> a.bin 
'000010111010001011101000000010111010001011101000' 
>>> a.replace('0b00001', '0xe') 
2    # 2 replacements made 
>>> a.bin 
'1110011101000101110100011100111010001011101000' 

Je ne suis pas sûr de ce que vos besoins sont, donc tout cela pourrait être surpuissant et vous ne voudrez peut-être pas utiliser une bibliothèque externe dans tous les cas, mais le support intégré de Python pour les tableaux de bits est un peu basique.

+0

Cela semble mort. Mon approche était plus simpliste mais pas aussi polyvalente. – Harryooo

4

Cela peut être fait avec la mise en forme de chaîne, dans 2.6+:

>>> '{0:024b}'.format(23) 
'000000000000000000010111' 
+0

Cela peut-il être fait pour fonctionner avec des fractions? –

+0

Impossible de faire fonctionner Fraction(). – Harryooo