First Program Bug (Newbie)

Gabriel Genellina gagsl-py2 at yahoo.com.ar
Tue Mar 18 02:33:53 CET 2008

```On 17 mar, 21:03, Benjamin Serrato <benjamin.serr... at gmail.com> wrote:

> I Found It!! The following was a post asking for help finding a bug. I
> thought I needed help with my syntax, but just before sending I found
> the bug on line 13. Line 13 should read: "base = 2". I would still
> appreciate any comments on my program. Maybe there is a better way to do
> it that I didn't think about. I know it's not that interesting but it's
> my first one.

You may look at the fact.py demo script (somewhere in your python
installation)

> I'm almost halfway through an online tutorial I found on the python.org
> site and decided to stop and write a program for myself. I got it in my
> head to write a program to print all the primes; the idea came from
> another tutorial. The program prints some non-prime numbers. In a
> comparison to lists of primes the program prints eight non-primes for
> numbers less than 150. Those numbers are [27,35,87,95,119,123,143,147].
> Here is the program.
>
> base = 2
> candidate = 3
>
> while True:
>         while candidate % base != 0:
>                 base = base + 1
>                 if base > (candidate / 2):
>                         print candidate
>                         candidate = candidate + 1
>                         base = 2
>         else:
>                 candidate = candidate + 1
>                 base = 2 # added

Note that you can increment candidate by 2 (starting at 3, all primes
are odd numbers). And after testing 2, you can increment base by 2
also.
And you can exit somewhat earlier: if base*base>candidate there is no
point in keep trying (now you`re exiting when base*2>candidate)

> At first I tried to use 'return' on the 'else' block to cause the
> program to loop, but I don't understand 'return' yet and that didn't
> work. So, I put the rest into another while loop and was really happy to
> find it worked but the program prints some non-prime numbers.

return only makes sense inside a function. Wait until the next
lesson...

--
Gabriel Genellina

```