string.atoi and string.atol broken?

Peter Otten __peter__ at web.de
Wed Jan 26 03:17:15 EST 2005


Nick Coghlan wrote:

> Huh - you remind me that I forgot to put the "show_base" Bengt and I came
> up with into the ASPN cookbook. . .
> 
> Py> def show_base(val, base, min_digits=1, complement=False,
> ...               digits="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"):
> ...   if base > len(digits): raise ValueError("Not enough digits for
> base") ...   negative = val < 0
> ...   val = abs(val)
> ...   if complement:
> ...     sign = ""
> ...     max = base**min_digits
> ...     if (val >= max) or (not negative and val == max):
> ...       raise ValueError("Value out of range for complemented format")
> ...     if negative:
> ...       val = (max - val)
> ...   else:
> ...     sign = "-" * negative
> ...   val_digits = []
> ...   while val:
> ...     val, digit = divmod(val, base)
> ...     val_digits.append(digits[digit])
> ...   result = "".join(reversed(val_digits))
> ...   return sign + ("0" * (min_digits - len(result))) + result
> ...
> 

Yes, that is a bit more general. For the cookbook you might consider
factoring out the "".join() operation, thus entirely removing the upper
limit for the base (the output of the first step would be a tuple of
integers).

Peter




More information about the Python-list mailing list