[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
More information about the Tutor
mailing list