我正在尝试解决Eulor问题5,找到最大的3位数回文。
这是我的代码。
def reverse(num):
return int(str(num)[::-1])
for y in range (100,999):
for x in range (100,999):
if x*y == reverse(x*y):
print(x*y)
它解决了问题,给出了正确的价值,但也给出了其他三位数的回文。我只想让它返回最大值。我尝试使用以下内容,但它无法正常工作。
print( max (x*y))
有什么建议吗?
注意:我知道这可能不是解决问题的最好方法,但是我这样做的方式我想用相同的方法完成它。
感谢任何可以为新用户提供指导的人。
答案 0 :(得分:1)
您只需跟踪最大值:
def reverse(num):
return int(str(num)[::-1])
largest = None
for y in range (100,999):
for x in range (100,999):
xy = x*y
if xy > largest and xy == reverse(xy):
largest = xy
print largest
答案 1 :(得分:0)
您需要在浏览数字时跟踪最大值,然后在结尾处打印出来:
def reverse(num):
return int(str(num)[::-1])
current_max=0
for y in range (100,999):
for x in range (100,999):
xy=x*y
if xy == reverse(xy):
current_max=max(current_max,xy)
print(current_max)
答案 2 :(得分:-1)
current_max = 0
for y in range (100,1000):
for x in range (100,1000): #range is half-open
if x*y > current_max and x*y == reverse(x*y):
#Note that python is lazy and will only evaluate
#x*y == reverse(x*y) if x*y > current max.
#which is good, because casting to a string and back again
#is marginally slower than a simple int comparison.
current_max = x*y
print current_max
您应该跟踪当前最大的最大值。内置max
将找到赋予它的最大的东西(无论是可迭代的还是多个参数,请参阅documentation)
答案 3 :(得分:-1)
不是打印,而是将每个值存储到列表中,然后在完成后打印列表中的最大值。无论是那个还是保持一个正在运行的“最大的价值观”。值。
答案 4 :(得分:-1)
你几乎那里!您可以从100到998的每个数字打印所有有效的回文。
你可以存储所有这些"有效"回到列表中,然后通过max()函数传递列表以获得最大的回文产品。
# Create a new list object
list_valid_palindromes = []
def reverse(num):
return int(str(num)[::-1])
for y in range (100,999):
for x in range (100,999):
if x*y == reverse(x*y):
# Add the valid palindrome to the list
list_valid_palindromes.append(x*y)
# Print the largest value on the list
print max(list_valid_palindromes)
一个更有效的选项,因为您已经在循环中,将最大值存储到变量中,并在您完成乘法后将其打印出来。
# Create a new variable to hold the largest number
i_largestNumberSoFar = 0
def reverse(num):
return int(str(num)[::-1])
for y in range (100,999):
for x in range (100,999):
if x*y == reverse(x*y):
# Compare and store the largest so far and the current product
i_largestNumberSoFar = max( (x*y), i_largestNumberSoFar )
# Print what's was left on the variable
print i_largestNumberSoFar
答案 5 :(得分:-1)
不是打印每个数字,而是跟踪结果。循环完成后,打印最后一个结果。
def reverse(num):
return int(str(num)[::-1])
result = 0 # add an variable to keep track of your results
for y in range (100,999):
for x in range (100,999):
if x*y == reverse(x*y):
result = x*y
print(result)