[Tutor] rounding up to the nearest multiple of 8
Joel Goldstick
joel.goldstick at gmail.com
Thu Oct 4 22:04:46 CEST 2012
On Thu, Oct 4, 2012 at 3:47 PM, Albert-Jan Roskam <fomcl at yahoo.com> wrote:
> Hi,
>
> The function below works, but it's such a kludge! Is there a way to make this more elegant?
> As said in the docstring, I want to round up a given integer to the nearest multiple of 8. I was thinking
> of something like math.ceil.
>
> def _getPadding(charlen):
> """ Helper function to replace null bytes ('\x00') at the end of
> string values. Rounds up <charlen> to the nearest multiple of 8.
> Every string value is 8 bytes or a multiple thereof. For example, a
> 5-character string needs a padding of 3 spaces to prevent the
> null bytes
> >>> dict([(charlen, _getPadding(charlen)) for charlen in range(1, 40, 7)])
> {1: 8, 36: 40, 8: 8, 15: 16, 22: 24, 29: 32}
> >>> s = "I love Python"
> >>> s.ljust(_getPadding(len(s)))
> 'I love Python '
> """
> i = 0
> while True:
> i += 1
> if (i * 8) > charlen:
> return (i * 8) % charlen + charlen if charlen > 1 else 8
> if __name__ == "__main__":
> import doctest
> doctest.testmod()
>
> Thanks!
>
> Regards,
> Albert-Jan
>
>
>>> my_string = "123"
>>> pad = 8 - len(my_string) % 8
>>> my_string = my_string + " " * pad
>>> my_string
'123 '
--
Joel Goldstick
More information about the Tutor
mailing list