[Tutor] Use flag to exit?

Eike Welk eike.welk at gmx.net
Thu Jun 24 08:47:20 CEST 2010


On Thursday June 24 2010 07:31:47 Richard D. Moores wrote:
> My question is how to best exit when the big prime has been found. I
> used a flag (see the highlighted lines 34,40,44), but I seem to
> remember that, though they can work, flags are frowned upon by
> Pythonistas, and should be used only when absolutely necessary. So, is
> one necessary in my script?

I think a good way to exit from deep down in a complicated algorithm is to 
raise an exception:

class FoundPrimeException(Exception):
	def __init__(self, big_p):
		Exception.__init__(self)
		self.prime = big_p

Then you put your lines 33 to 43 between a try:... except construction and 
raise your exception in line 40. In the except ...: block you handle the prime 
that you have found. Here are my proposed modifications to your lines 33 to 
47: 

try:
    for b in range(p-1,0,-1):
        a = p - b
        one_off_big_p = 2**a*3**b
        for x in [one_off_big_p - 1, one_off_big_p + 1]:
            if isPrime(x):
                raise FoundPrimeException(x)
except FoundPrimeException, e:
    big_p = e.big_p
    print("The smaller prime", p, "determined this prime, ")
    print("with", len(str(big_p)), "digits:")
    print(big_p)
    print("a and b were", a, b)

time1 = time()
print("Time was", round((time1-time0),2), "secs")


I hope I didn't break your algorithm; I'm typing this directly into the email 
program. 


Eike.


More information about the Tutor mailing list