2010-06-04 11 views
3

Je suis en train de faire un simple script en Python qui permet d'imprimer des valeurs hexagonales et incrémentales comme ceci:Python itération

char = 0 
char2 = 0 

def doublehex(): 
    global char,char2 
    for x in range(255): 
     char = char + 1 
     a = str(chr(char)).encode("hex") 
     for p in range(255): 
      char2 = char2 + 1 
      b = str(chr(char2)).encode("hex") 
      c = a+" "+b 
      print "testing with:%s"%(c) 
doublehex() 

Sortie:

testing with:01 01 
testing with:01 02 
testing with:01 03 
[snip] 
testing with:01 fd 
testing with:01 fe 
testing with:01 ff 

Traceback (most recent call last): 
    File "test2.py", line 16, in doublehex 
    b = str(chr(char2)).encode("hex") 
ValueError: chr() arg not in range(256) 

En fait ce que je suis en train de faire est:

01 01 
01 02 
[snip] 
01 ff 
02 01 
02 02 

Et ainsi de suite, jusqu'à ff ff. Quel est le problème dans mon script?

il semble aussi que je ne peux pas essayer:

00 01 
00 02 

Je ne sais pas pourquoi.

Répondre

4

Vous devez définir char2 = 0 avant

for p in range(255): 

Et en fait, vous n'avez pas besoin compteurs - charbon, Char2

suivant fonctionnera de 0 à ff

for x in range(256): 
    for p in range(256): 
     print chr(x).encode("hex"),chr(p).encode("hex") 
6
for x in xrange(256): 
    for y in xrange(256): 
     print '%02x %02x' % (x, y) 
0

Pour imprimer une valeur hexadécimale, faites quelque chose comme ceci:

for i in range(255): 
    print "%x" % i 
1

Pourquoi pas quelque chose de simple?

for x in range(0, int("FFFF", 16)): 
    print "%x" % x 
1

une seule ligne et (moins l'importation):

import itertools 
hexs = itertools.product(*([[chr(x).encode("hex") for x in range(256)]] * 2)) 
+0

Heh, mieux que le mien :) –

0

Si vous utilisez Python 2.6, il existe un moyen de 4 lignes pour faire ce que vous essayez:

import itertools 

char_pair_list = itertools.product(range(256),range(256)) 
for char_pair in char_pair_list: 
    print str(chr(char_pair[0])).encode("hex"), ',' , str(chr(char_pair[1])).encode("hex")