我想通过使用python来完成项目的euler问题。 但我遇到以下任务的问题:
回文数字两种方式相同。由两个2位数字的乘积制成的最大回文是9009 = 91×99。 找到由两个3位数字的乘积制成的最大回文。
我给定任务的代码:
def palindrome_number():
n=0
lower_range = 100
upper_range = 999
while x >= lower_range or x <= upper_range and y >= lower_range or y <= upper_range:
z = x * y
while z > n:
s = str(x * y)
if s == s[::-1]:
n = x * y
print(n)
现在我不知道如何检查从100-999变化的所有x和y数字。 我认为它必须像我的代码,但它不起作用
答案 0 :(得分:0)
实际上问题可以在一行中解决:)
max(x*y for x in range(100, 1000) for y in range(100, 1000) if str(x*y)==str(x*y)[::-1])
for
循环 for
循环比while
循环更适合这种操作。下面是解决方案(我只用两个for
循环替换了你的while。第一个循环告诉变量x
从100到999运行,第二个循环告诉y
执行相同。使用这两个循环,您将尝试x
和y
的所有组合。)
def palindrome_number():
n = 0
lower_range = 100
upper_range = 999
for x in range(lower_range, upper_range+1):
for y in range(lower_range, upper_range+1):
z = x * y
if z > n: # an *if* suffices ;)
s = str(x * y)
if s == s[::-1]:
n = x * y
print(n)
while
循环要使用while
循环获得相同的内容,您必须注意更改x
和y
以获取所有组合:
x = y = lower_range
while x >= lower_range and x <= upper_range: # (*and* instead of *or*)
while y >= lower_range and y <= upper_range: # (again you want the >= *and* the <= to be fulfilled)
z = x * y
if z > n:
s = str(x * y)
if s == s[::-1]:
n = x * y
y += 1 # change y to get all combinations
y = lower_range
x += 1 # change x to get all combinations