My backwards logic

Dave Angel davea at davea.name
Fri Sep 5 13:15:23 EDT 2014


Seymore4Head <Seymore4Head at Hotmail.invalid> Wrote in message:
> I'm still doing practice problems.  I haven't heard from the library
> on any of the books I have requested.
> 
> http://www.practicepython.org/exercise/2014/04/16/11-check-primality-functions.html
> 
> This is not a hard problem, but it got me to thinking a little.  A
> prime number will divide by one and itself.  When setting up this
> loop, if I start at 2 instead of 1, that automatically excludes one of
> the factors.  Then, by default, Python goes "to" the chosen count and
> not "through" the count, so just the syntax causes Python to rule out
> the other factor (the number itself).
> 
> So this works:
> while True:
>     a=random.randrange(1,8)
>     print (a)
>     for x in range(2,a):
>         if a%x==0:
>             print ("Number is not prime")
>             break
>     wait = input (" "*40  + "Wait")
> 
> But, what this instructions want printed is "This is a prime number"
> So how to I use this code logic NOT print (not prime) and have the
> logic print "This number is prime"
> 
> 

The traditional way of telling whether something happened in a
 loop is to set a flag to False outside the loop,  and
 conditionally set it to True in the if test. Then after the loop,
 check your flag.

Python however has a better way. You can put an else clause on the
 for loop:


 for x in range(2,a):
        if a%x==0:
           print ("Number is not prime")
           break
  else:
        print ("Number is prime")

The else clause fires if no break executed. 

There are also ways to do it using not, any, and a list
 comprehension, no explicit loop at all.

-- 
DaveA




More information about the Python-list mailing list