我正在解决一个竞争性编程问题,但是此错误不断弹出。这是我的代码:
import math
def palcheck(check,l):
i=-1
for x in range(0,l):
if(check[x]!=check[i]):
return False
i=i-1
return True
def mirror(s,length):
pivot=math.floor(length/2)
if length%2 == 0:
i=length-1
j=0
while j <= pivot:
s[i]=s[j]
j=j+1
i=i-1
else:
i=length-1
j=0
while j <= pivot-1:
s[i]=s[j]
j=j+1
i=i-1
def nextpal(s):
temp=list(s)
l=len(s)
if not palcheck(s,l):
mirror(temp,l)
n1=int(s)
n2=int(''.join(temp))
i=math.floor(l/2)
j=math.ceil(l/2)
if(n1>n2):
while n1>n2:
if i==0:
break
if i==j:
temp[i]=str(int(temp[i])+1)
else:
temp[i]=str(int(temp[i])+1)
temp[j]=str(int(temp[j])+1)
if temp[i] == 9 and temp[j] == 9:
i=i-1
j=j+1
n2=int(''.join(temp))
else:
i=math.floor(l/2)
j=math.ceil(l/2)
while n1<n2:
if i==0:
break
if i==j:
temp[i]=str(int(temp[i])-1)
else:
temp[i]=str(int(temp[i])-1)
temp[j]=str(int(temp[j])-1)
if temp[i] == 0 and temp[j] == 0:
i=i-1
j=j+1
n2=int(''.join(temp))
if i==j:
temp[i]=str(int(temp[i])+1)
n2=int(''.join(temp))
else:
temp[i]=str(int(temp[i])+1)
temp[j]=str(int(temp[j])+1)
n2=int(''.join(temp))
if i == 0:
print(n2+2)
t=int(input())
str=[]
for x in range(0,t):
str.append(input())
for x in str:
nextpal(x)
而且,这是错误:
nextpal中的文件“ PALIN.py”,第73行 temp [i] = str(int(temp [i])+ 1) TypeError:“列表”对象不可调用
我不知道为什么,因为我没有使用列表对象temp来调用函数,而这是在标题相同的问题中常见的错误
要了解在给定的索引下使用以字符形式显示的数字,将其转换为整数,对其进行递增,然后再将其更改回字符的情况。
答案 0 :(得分:3)
您有一个名为str
的列表,但还想调用一个名为str
的函数。
更改列表名称,以避免名称冲突。
答案 1 :(得分:0)
您将名称str
用于列表。不要忘记str
是一个内置函数。
>>> str = 1
>>> str(4)
Traceback (most recent call last):
File "<pyshell#5>", line 1, in <module>
str(4)
TypeError: 'int' object is not callable
>>> str
1
将列表str
重命名为另一个名称,因为您还需要将数字转换为字符串。
查看代码的结尾。您的最后一部分代码如下:
mylist=[]
for x in range(0,t):
mylist.append(input())
for x in mylist:
nextpal(x)
为消除混乱,这是另一段代码:
>>> def abc(string):
print(string)
>>> str = 1
>>> abc(str)
1
>>>
您可以在函数外使用外部变量,但不能在函数外使用函数的变量。