欧拉计划:最大的回文 (Python)。我做错了什么?
Project Euler: Largest palindrome (Python). What did I do wrong?
我可能做错了很多事情,因为我只是一个初学者。但是有人可以帮助我吗?目标是打印由两个 3 位数的乘积组成的最大回文。谢谢
palindromes = []
for i in range(100, 1000):
for x in range(100, 1000):
a = x*i
str(a)
b = a[::-1]
if a == b :
palindromes.append(a)
print (palindromes[len(palindromes) - 1])
您在定义代码之前在代码中使用了 x
,因此该代码会出错。您还有其他错误:您应该能够使用回溯轻松找到它们。一个逻辑错误是你找到了 a
的字符串,但没有把它存储在任何地方,所以它丢失了。您还可以从 a
作为整数开始,然后尝试将其设为字符串:将您的类型分开,除非您有充分的理由更改类型。您应该使用更好的变量名称:a,b,i,x
是糟糕的名称。写下它们的意思!多输入几个字符是便宜的并且可以防止错误。
每个回文必须是两个个三位数的乘积,所以你需要两个个嵌套循环range(100, 1000)
.使用 x
作为你的另一个循环变量,你不需要改变你的代码。
打印前,添加行:
palindrome.sort()
基本要点:
- 将数字转换为字符串时,必须存储结果。
- 完成后对列表进行排序。
- 使用右端索引获取最后一个元素
- 当你找到回文时,保持整数形式,这样排序就可以正常进行。否则,你会得到 '99999' 作为最大的回文。
代码:
palindromes = []
for i in range(100, 1000):
for x in range(100, 1000):
a = str(x*i)
b = a[::-1]
if a == b :
palindromes.append(int(a))
print (sorted(palindromes)[-1])
我可能做错了很多事情,因为我只是一个初学者。但是有人可以帮助我吗?目标是打印由两个 3 位数的乘积组成的最大回文。谢谢
palindromes = []
for i in range(100, 1000):
for x in range(100, 1000):
a = x*i
str(a)
b = a[::-1]
if a == b :
palindromes.append(a)
print (palindromes[len(palindromes) - 1])
您在定义代码之前在代码中使用了 x
,因此该代码会出错。您还有其他错误:您应该能够使用回溯轻松找到它们。一个逻辑错误是你找到了 a
的字符串,但没有把它存储在任何地方,所以它丢失了。您还可以从 a
作为整数开始,然后尝试将其设为字符串:将您的类型分开,除非您有充分的理由更改类型。您应该使用更好的变量名称:a,b,i,x
是糟糕的名称。写下它们的意思!多输入几个字符是便宜的并且可以防止错误。
每个回文必须是两个个三位数的乘积,所以你需要两个个嵌套循环range(100, 1000)
.使用 x
作为你的另一个循环变量,你不需要改变你的代码。
打印前,添加行:
palindrome.sort()
基本要点:
- 将数字转换为字符串时,必须存储结果。
- 完成后对列表进行排序。
- 使用右端索引获取最后一个元素
- 当你找到回文时,保持整数形式,这样排序就可以正常进行。否则,你会得到 '99999' 作为最大的回文。
代码:
palindromes = []
for i in range(100, 1000):
for x in range(100, 1000):
a = str(x*i)
b = a[::-1]
if a == b :
palindromes.append(int(a))
print (sorted(palindromes)[-1])