My backwards logic

Chris Kaynor ckaynor at zindagigames.com
Fri Sep 5 20:17:05 CEST 2014


On Fri, Sep 5, 2014 at 10:44 AM, Seymore4Head <Seymore4Head at hotmail.invalid>
wrote:

> On Fri, 05 Sep 2014 10:08:18 -0700, Ethan Furman <ethan at stoneleaf.us>
> wrote:
>
> >On 09/05/2014 09:48 AM, Seymore4Head wrote:
> >> 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"
> >
> >Python's 'for' loop has a handy 'else' extension which is perfect for the
> search-type of 'for' loop:
> >
> >    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
> >         else:
> >             print ("Number is prime")
> >         wait = input (" "*40  + "Wait")
> >
> >Note the two lines I added after the 'break' and before the 'wait'.
>
> I had already tried this one.
> The solution I want should only print:
> "This number is prime"
>
> Adding else causes the program to also print "This number is not
> prime"
>

If you do not want it to print the "Number is not prime", just remove the
print("Number is not prime") line.


> I also tried the flag=True suggestion, but never got one that worked.
> I am unsure when to use flag=True and flag==True
> Then there is flag="True" and flag=="True"
>

Generally, you would want to use:

flag = False

 before the loop, and

flag = True

inside the loop (once you know the number is not prime). After the loop,
you would typically just use:

if flag: # This could be "if flag == True:", however the plain "if flag:"
is more Pythonic.

print("Number is prime")


The "=" operator is assignment - storing a new value.
The "==" operator is for equality checking. The inverse is the "!="
operator which checks for inequality.

What I really wanted was something like:
> if !(a%x==0)


In this case, that will not work, as you only know that the number is prime
after checking all the values, which means after the loop has completed.

Ignoring the fact that it would not function for this use case, the proper
Python syntax for that would be one of:

   - if a%x != 0: # Probably the clearest for this case.
   - if not (a%x==0):
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/python-list/attachments/20140905/9060fd4c/attachment.html>


More information about the Python-list mailing list