# [Tutor] FW: Splitting a number into even- and odd- numbered digits

Carroll, Barry Barry.Carroll at psc.com
Thu Apr 20 18:49:28 CEST 2006

```Greetings:

First of all, thanks to those who contributed suggestions.

Unfortunately, my description was incomplete.

> I am writing a function that accepts a string of decimal digits,
> calculates a checksum and returns it as a single character string.
> The first step in the calculation is to split the input into two
strings:
> the even- and odd- numbered digits, respectively.  The least
significant
> digit is defined as odd.

I forgot to include two important requirements:

1. the length of the input string is arbitrary,
2. the order of the digits must be maintained.

I could not find a way to include these requirements in a single, simple
expression.  I decided to make an explicit test for string length, which
simplified matters. I came up with this:

>>>>>>>
>>> def odd_even(x):
...     if len(x) % 2 == 1:
...         return x[::2], x[1::2]
...     else:
...         return x[1::2], x[::2]

>>> odd_even('987654321')
('97531', '8642')

>>> odd_even('98765432')
('8642', '9753')
>>>
>>>>>>>

which is an improvement, I think, on my original.

> >>>>>>>
> >>> s = '987654321'
> >>> odd = ''
> >>> for c in s[::-2]:
> ...     odd = c + odd
> ...
> >>> s = s[:-1]
> >>> even = ''
> >>> for c in s[::-2]:
> ...     even = c + even
> ...
> >>> odd
> '97531'
> >>> even
> '8642'
> >>>>>>>

Thanks again.  This is the most useful list I've ever found.

Regards,

Barry
barry.carroll at psc.com
541-302-1107
________________________
We who cut mere stones must always be envisioning cathedrals.

-Quarry worker's creed

```