Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/292.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python中的嵌套循环_Python - Fatal编程技术网

Python中的嵌套循环

Python中的嵌套循环,python,Python,我试图找到最大的回文,它是两个3位数的乘积。我的问题是回文的格式是abccba,因此我只需在每个数字上循环,并在两个3位数字的乘积的最大数字处停止 这段代码 def hasLargeDivisors(n): """ Function to determine if a number has two divisors greater than 99 """ d = 999 while n / d > 99 and n / d < 999

我试图找到最大的回文,它是两个3位数的乘积。我的问题是回文的格式是abccba,因此我只需在每个数字上循环,并在两个3位数字的乘积的最大数字处停止

这段代码

def hasLargeDivisors(n):
    """
    Function to determine if a number has two divisors
    greater than 99
    """
    d = 999
    while n / d > 99 and n / d < 999 and d > 99:
        if n % d is 0:
            return True
        d-=1

    return False

def compisitePalindrome():
    """
    Function to find the largest palindrome 
    that is the product of 2 three-digit numbers
    """ 
    for a in reversed(xrange(1, 9)):
        for b in reversed(xrange(0, 9)):
            for c in reversed(xrange(0, 9)):
                num = a*100001 + b*10010 + c*1100
                if hasLargeDivisors(num):
                    return num

    return 0
def具有大除数(n):
"""
函数确定一个数是否有两个除数
大于99
"""
d=999
当n/d>99且n/d<999且d>99时:
如果n%d为0:
返回真值
d-=1
返回错误
def CompisiteAlindrome():
"""
函数查找最大回文
这是两个三位数的乘积
""" 
对于反向(X范围(1,9))中的a:
对于反向(X范围(0,9))中的b:
对于反向(X范围(0,9))中的c:
数值=a*100001+b*10010+c*1100
如果有大除数(num):
返回数
返回0
产生888888=962*924,这是不正确的


此代码

def hasLargeDivisors(n):
    """
    Function to determine if a number has two divisors
    greater than 99
    """
    d = 999
    while n / d > 99 and n / d < 999 and d > 99:
        if n % d is 0:
            return True
        d-=1

    return False

def compisitePalindrome():
    """
    Function to find the largest palindrome 
    that is the product of 2 three-digit numbers
    """ 
    a = 9
    for b in reversed(xrange(0, 9)):
        for c in reversed(xrange(0, 9)):
            num = a*100001 + b*10010 + c*1100
            if hasLargeDivisors(num):
                return num

    return 0
def具有大除数(n):
"""
函数确定一个数是否有两个除数
大于99
"""
d=999
当n/d>99且n/d<999且d>99时:
如果n%d为0:
返回真值
d-=1
返回错误
def CompisiteAlindrome():
"""
函数查找最大回文
这是两个三位数的乘积
""" 
a=9
对于反向(X范围(0,9))中的b:
对于反向(X范围(0,9))中的c:
数值=a*100001+b*10010+c*1100
如果有大除数(num):
返回数
返回0
生成906609=993*913,这是正确的

我不知道我哪里出错了

xrange(1, 9) == (1, 2, 3, 4, 5, 6, 7, 8)
xrange(开始、停止、步骤)
生成从
start
到(但不包括)
stop
的所有数字,步骤为
step

xrange(5) == (0, 1, 2, 3, 4)
xrange(1, 5) == (1, 2, 3, 4)
xrange(1, 5, 2) == (1, 3)
您可以执行
xrange(1,10)
操作,以将
9
也包括在范围中

xrange(开始、停止、步骤)
生成从
start
到(但不包括)
stop
的所有数字,步骤为
step

xrange(5) == (0, 1, 2, 3, 4)
xrange(1, 5) == (1, 2, 3, 4)
xrange(1, 5, 2) == (1, 3)
您可以执行
xrange(1,10)
9
也包括在范围内。

只有(大约)50万对3位数的数字,因此测试它们更快、更简单

def palindrome_3products():
    for i in xrange(100, 1000):
        for j in xrange(i, 1000):
            if str(i * j) == str(i * j)[::-1]:
                yield i * j, i, j

print max(palindrome_3products())
只有(大约)50万对3位数的数字,所以测试它们更快更简单

def palindrome_3products():
    for i in xrange(100, 1000):
        for j in xrange(i, 1000):
            if str(i * j) == str(i * j)[::-1]:
                yield i * j, i, j

print max(palindrome_3products())

谢谢那么如何使用xrange()将范围从1限制到9呢?谢谢。那么,如何使用xrange()将范围限制在1到9之间呢?考虑到任何回文数都可以被
11
整除,可以大大简化算法。因此,从
11
的最高倍数开始,这是两个3位数字的倍数,然后在
xrange
中使用
-11
,检查数字是否为回文。谢谢。我已经提供了答案,所以他们给了我一个解决方案。我现在正在读它,它也暗示了你所提到的。考虑到任何回文数都可以被
11
整除,你可以大大简化算法。因此,从
11
的最高倍数开始,这是两个3位数字的倍数,然后在
xrange
中使用
-11
,检查数字是否为回文。谢谢。我已经提供了答案,所以他们给了我一个解决方案。我现在正在读它,它也暗示了你所提到的。