On 07/06/2013 09:18 PM, Jim Mooney wrote:
On 6 July 2013 18:01, ALAN GAULD <alan.ga...@btinternet.com> wrote:


If its structured use a parser for preference. (HTML, XML or pyparser etc
for
proprietary type stuff


Ah, I see - don't bother with a parser unless you have a lot of structure.

BTW, I extracted the main function from my program to a test program and it
gets an index error after 6,000 or so tests of random integer strings. in
case someone finds that, I'm already workin' on it ;')

Jim



If the exception was on the line:

        first, second, third, last_two = (triplet[0], triplet[1],
triplet[2], triplet[1:])

then perhaps you want to apply this fix to the leftpad logic:


def make_triplets_from_input(numbers_str):
    leftpad = "0" * ((-len(numbers_str))%3)
    numbers_str = leftpad + numbers_str
    triplets = [numbers_str[x:x+3] for x in range(0,len(numbers_str),3)]
    return triplets

Testing with the following,

for j in xrange(100000000):
    i = random.randint(0, 10**12)
    triplets = make_triplets_from_input(str(i))
    print(j, i, numbers_to_name(triplets))

After some 800,000 values, I killed it, and put a conditional print instead, printing every ten-thousandth value. (It still calls numbers_to_name(), obviously.) It has done the full hundred million random values without crashing.

If you'd like, I'll post my full version, changed as little as possible from yours, but incorporating the suggestions I've tried to make here.

In another message, you had the following:


> As a start, where I print Zero and exit, it seemed natural since
> a user entering Zero is, I assume, asking for what they want,
> and they get Zero, finissimo. But I guess I should be generous
> and figure they mistyped, then loop for better input.
> I think I already asked (or maybe not) if more than
> one exit is a good idea, though.

You miss my point. The get_raw_input() function should permit a value of "0" but it should NOT just print a value and abort the program. It breaks all reasonable factoring. Conversely, the numbers_to_name() function SHOULD take a value of zero (which will actually be ["000"] ) and at that point, it's fine to special case. Not by printing "Zero", but by returning "zero".



--
DaveA

_______________________________________________
Tutor maillist  -  Tutor@python.org
To unsubscribe or change subscription options:
http://mail.python.org/mailman/listinfo/tutor

Reply via email to