Поэтому задача, которую я пытаюсь решить, - найти самый большой палиндром из двух трехзначных чисел. Я новичок в Python, и поэтому мой код еще не изящен и не преломлен, но есть логическая ошибка, которую я не могу найти.

def ispalindrome(n):
    rev_n = str(n)[::-1]
    if n == rev_n:
        return True
    else:
        return False


first_num = 100
second_num = 100
mylist=[]
while first_num < 1000:
    while second_num < 1000:
        item = first_num * second_num
        mylist.append(item)
        second_num += 1
    second_num = 100
    first_num +=1
# print (mylist)
num_as_string = []
for i in mylist:
    i = str(i)
    num_as_string.append(i)
print("Total products of two 3-digit numbers: {}").format(len(num_as_string))
print("-----------------------------------------------------")

def convert_to_num_list(string_list):
    new_num_list = []
    item = int(string_list)
    new_num_list.append(item)
    return new_num_list



palindrome_list = []

for j in num_as_string:
    if ispalindrome(j) == True:
        palindrome_list.append(j)
        palindrome_list.sort()
        # print(palindrome_list)
        x = convert_to_num_list(j)
        largest_palindrome = max(x)

print("Total palindroms of product of two 3-digit numers: {}").format(len(palindrome_list))

print("Largest palindrome = {}").format(largest_palindrome)

Проблема в том, что я получаю самый большой палиндром как 580085, который равен 995 * 583, но НЕ самый большой палиндром. Я считаю, что самый большой палиндром - 906609, что составляет 993 * 913, но мой код не находит этого. Может ли кто-нибудь помочь мне с недостатком в моей логике?

0
Burner918 28 Май 2017 в 10:12

2 ответа

Вот функция для нахождения наибольшего палиндрома из произведения двух 3-значных чисел, которое я нашел в stackoverflow.

Ссылка на то, что я нашел, - https://stackoverflow.com/a/7460573

def is_pal(c):
       return int(str(c)[::-1]) == c

   maxpal = 0
   for a in range(999, 99, -1):
       for b in range(a, 99, -1):
           prod = a * b
           if is_pal(prod) and prod > maxpal:
               maxpal = prod

   print maxpal
1
Dina Kaiser 4 Июн 2017 в 09:04
n1=999
n2=999
k=0
sl=[]
while n1>1:
  count=n1
  while count>=1:
    result=n1*count
    res=str(result)
    res1=res[::-1]
    if (res==res1):
      sl.insert(k,result)
      k+=1
    count=count-1
  n1=n1-1
print("largest pelindrom of 3 digit product is is %d" %(max(sl)))
0
Dinesh Kumar 15 Фев 2018 в 05:08