Я застрял на этом вопросе, когда пытался решить его с помощью пакета numpy. Моя идея заключалась в том, что я умножу и сохраню список всех вычислений, которые я сделал для 3-х ди git чисел в диапазоне от 100 до 999, а затем просмотрел бы список, чтобы увидеть, какие из них являются палиндромом, и сохранить их. Наконец, заказал бы список и получил бы самый большой палиндром. Код ниже показывает, что я пытался сделать.
import numpy as np
def void():
list1 = np.array(range(100,999))
list2 = np.array(range(100,999))
k = []
for i,j in zip(list1,list2):
k.append(np.multiply(list1,list2))
b = []
for x in range(0,len(k)):
if(reverseNum(k[x])==k[x]):
b.append(k[x])
print(b)
print(b[-1])
def reverseNum(num):
rev = 0
while(num>0):
rem = num % 10
rev = (rev*10) +rem
num = num // 10
return rev
void()
Однако, когда я пытаюсь проверить, являются ли числа в списке палиндромом, я получаю следующую ошибку:
Traceback (most recent call last):
File "main.py", line 40, in <module>
void()
File "main.py", line 22, in void
if(reverseNum(k[x]),k[x]):
File "main.py", line 31, in reverseNum
while(num>0):
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
Означает ли это, что нельзя использовать numpy как метод решения этой проблемы? Если это так, то в чем я ошибаюсь?
РЕДАКТИРОВАТЬ: То, что я пробовал до сих пор (с тех пор, как его спросили): на основе сообщений об ошибках я попытался вместо этого использовать np.equal
, а также np.greater
проверки if(reverseNum(k[x])==k[x])
и num>0
, но дает ту же ошибку.