Rogério Brito wrote:
Hi, All.

I'm just getting my feet wet on Python and, just for starters, I'm coding some elementary number theory algorithms (yes, I know that most of them are already implemented as modules, but this is an exercise in learning the language idioms).

As you can see from the code below, my background is in C, without too much sophistication.

What I would like is to receive some criticism to my code to make it more Python'esque and, possibly, use the resources of the computer in a more efficient way (the algorithm implemented below is the Sieve of Eratosthenes):

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
#!/usr/bin/env python

n = int(raw_input())
a = [i for i in range(0,n+1)]
a[1] = 0  # not a prime
prime = 1 # last used prime
finished = False

while (not finished):
    prime = prime + 1
    # find new prime
    while prime*prime <= n and a[prime] == 0:
    prime += 1
    # cross the composite numbers
    if prime*prime <= n:
    j = 2*prime
    while j <= n:
        a[j] = 0
        j += prime
    else:
    finished = True

# print out the prime numbers
i = 2
while i <= n:
    if a[i] != 0:
    print a[i]
    i += 1
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Thank you for any help in improving this program,

Your Python is actually pretty good - if Raymond Hettinger pronounces it OK then few would dare to disagree.

As for your English, though, the word you sought was "Pythonic" (not that you will ever find such a word in Webster's dictionary). To suggest that your code is Pythonesque would mean you found it farcical or ridiculous (like a Monty Python sketch), which it clearly is not.

Another wrinkle you might consider is simply printing the primes out as they are generated rather than doing the printing in a separate loop, though whether that approach would be preferable in "real life" would depend on the application, of course.

regards
 Steve

PS: I think either my mailer or yours has mangled the indentation.
--
Steve Holden        +1 571 484 6266   +1 800 494 3119
Holden Web LLC              http://www.holdenweb.com/

--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to