Python 如何跳出多重循环

今晚在写欧拉题目的时候就碰到这样的问题,需要跳出一个三重循环,但是真的很无奈,没有太好的办法,下面的是代码:

import time

def isPrime(n):

    """This function return a number is a prime or not"""

    from math import sqrt

    for i in range(2, int(sqrt(n))+1):

        if n % i == 0:

            return False

    return True



def permu(m, n):

    """This function return if two numbers has the same digits."""

    ms = list(str(m))

    ms.sort()

    ns = list(str(n))

    ns.sort()

    if ms == ns:

        return True

    else:

        return False

    

start = time.clock()    

primelist = [i for i in range(1000, 9999) if isPrime(i)]

primeset = set(primelist)

n = len(primelist)

count = 0



while count != 2:

    for i in range(0, n-2):

        for j in range(i+1, n-1):

            b = (primelist[i]+primelist[j])/2

            if b in primeset:

                if permu(primelist[i],primelist[j]) and permu(primelist[i], int(b)):

                    count += 1

                    if count == 2: print(str(primelist[i])+str(int(b))+str(primelist[j]))

                        

print(time.clock() - start)

 

本意是打算在count==2的时候,跳出这个三重循环的,结果发现不管怎么写都不行。所以只能无奈的在while上做了一个限制才跳出来的。

 

下面的是网上看到的其他人的关于跳出多重循环的办法

一,可以插入exception跳出。

class FoundException(Exception): pass



try:

    for row,record in enumerate(table):

         for columu,field in enumerate(record):

               for index,item in enumerate(field):

                       if item == target:

                                 raise FoundException()

except FoundException:

      print ("found at ({0},{1},{2})".format(row,column,index))

else:

       print ('not found')

 

二,就是放在函数体里,用return 语句返回。

def test():

    for x in range(9,0,-1):

         for y in range(9,-1,-1):

                for z in range(9,-1,-1):

                   s = 100001*x+10010*y+1100*z

                   s1 = int((round((s**0.5),0))) + 1

                   for i in range(s1,100,-1):

                      if s % s1 ==0:

                         print s,i

                         return s

 

当然如果是while循环你也可以像我那样在最顶层加入flag判定,然后跳出。

你可能感兴趣的:(python)