On Wed, 2006-04-19 at 17:17 -0700, Carroll, Barry wrote: > Greetings: > > 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. > This sounds like credit card checksum processing. This is my code for that:
def isbad(cardnumber): factors = ([2,1] * 8)[-len(cardnumber):] # alternating factors of 2 and 1 ending with 1 chkprods = [int(d)*f for (d,f) in zip(cardnumber,factors)] return sum(chkprods) % 10 This deviates quite a bit from your description and the description of the algorithm that I was working from. It was only after I had coded up separate even/odd character lists and looked at what was going on that I realized there was a much simpler way to describe the rules. Hopefully, I am not off in left field here. > The following code fragment does the job but seems sort of brutish and > inelegant to me: > > >>>>>>> > >>> 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' > >>>>>>> > > Is there a better (i.e. more Pythonic) way to do this? > > Thanks in advance for all your help. > > Regards, > > Barry > [EMAIL PROTECTED] > 541-302-1107 > ________________________ > We who cut mere stones must always be envisioning cathedrals. > -Quarry worker's creed > > > _______________________________________________ > Tutor maillist - Tutor@python.org > http://mail.python.org/mailman/listinfo/tutor -- Lloyd Kvam Venix Corp _______________________________________________ Tutor maillist - Tutor@python.org http://mail.python.org/mailman/listinfo/tutor