Python中的嵌套循环
我试图找到最大的回文,它是两个3位数的乘积。我的问题是回文的格式是abccba,因此我只需在每个数字上循环,并在两个3位数字的乘积的最大数字处停止 这段代码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
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
,检查数字是否为回文。谢谢。我已经提供了答案,所以他们给了我一个解决方案。我现在正在读它,它也暗示了你所提到的。