Count upward in python with variable base
You are apparently confusing numbers with the representation of numbers.
A number does not have a base... it's the number representation that has a base... for example the number represented as "101" in base 2 is the same as the number represented with "5" in base 10.
The range
function will count successive numbers, and you can get their representation in any base you like with something like:
digits = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
def int2str(x, base):
if x < 0:
return "-" + int2str(-x, base)
return ("" if x < base else int2str(x//base, base)) + digits[x % base]
You can do it with a custom iterator:
I took the iterater code from here and the base conversion from here
import string
class BaseRange:
def __init__(self, low, high, base):
digs = string.digits + string.letters
self.current = low
self.high = high
self.base = base
def __iter__(self):
return self
def next(self): # Python 3 requires this to be __next__
if self.current > self.high:
raise StopIteration
else:
self.current += 1
return self.int2base(self.current - 1, self.base)
def int2base(self, x, base):
if x < 0: sign = -1
elif x == 0: return digs[0]
else: sign = 1
x *= sign
digits = []
while x:
digits.append(digs[x % base])
x /= base
if sign < 0:
digits.append('-')
digits.reverse()
return ''.join(digits)
A Few Example runs produces:
>>> for c in BaseRange(0, 10, 2):
print(c)
0
1
01
11
001
101
011
111
0001
1001
0101
>>> for c in BaseRange(0, 10, 3):
print(c)
0
1
2
01
11
21
02
12
22
001
101