不能在单个元素上使用的多个函数上调用列表对象

时间:2018-08-30 17:45:37

标签: python python-3.x

我正在解决一个竞争性编程问题,但是此错误不断弹出。这是我的代码:

   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来调用函数,而这是在标题相同的问题中常见的错误

要了解在给定的索引下使用以字符形式显示的数字,将其转换为整数,对其进行递增,然后再将其更改回字符的情况。

2 个答案:

答案 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
>>> 

您可以在函数外使用外部变量,但不能在函数外使用函数的变量。