2013-07-15 183 views
-1

我是新来的蟒蛇我正在geeting错误TypeError: 'str' object is not callable类型错误:“海峡”对象不是可调用的蟒蛇

当输入

3 
111+23 
1638-1350 
1992+133 

然后porgram成功运行,但是当输入字符串包含“* “意味着我的else条件则阵痛TypeError

例如,如果输入的是

3 
111*23 
1638-1350 
110+456 

则得到了错误类型错误:“海峡”对象不是可调用

这里是我的代码 链接ideone代码 - >http://ideone.com/bDuXpW

def MAX(a,b,c): 
    if(a>b and a>c): 
     return a 
    elif(b>a and b>c): 
     return b 
    else: 
     return c 

t=input() 
for x in range(0,t): 
    myinput=raw_input() 
    if(myinput.find('+')!=-1): 
     num1,num2=myinput.split('+') 
     result=int(num1)+int(num2) 
     result_str=str(result) 
     num2='+'+num2 
     len1=len(num1) 
     len2=len(num2) 
     len3=len(result_str) 
     max=MAX(len1,len2,len3) 
     line='-'*max 
     num1=' '*(max-len1)+num1 
     num2=' '*(max-len2)+num2 
     result_str=' '*(max-len3)+result_str 
     print num1 
     print num2 
     print line 
     print result_str 
     print '\n' 
    elif(myinput.find('-')!=-1): 
     num1,num2=myinput.split('-') 
     result=int(num1)-int(num2) 
     result_str=str(result) 
     num2='-'+num2 
     len1=len(num1) 
     len2=len(num2) 
     len3=len(result_str) 
     max=MAX(len1,len2,len3) 
     line='-'*max 
     num1=' '*(max-len1)+num1 
     num2=' '*(max-len2)+num2 
     result_str=' '*(max-len3)+result_str 
     print num1 
     print num2 
     print line 
     print result_str 
     print '\n' 
    else: 
     num1,num2=myinput.split('*') 
     result=int(num1)*int(num2) 
     result_str=str(result) 
     num1_int=int(num1) 
     ascii_num2=[] 
     for y in num2: 
      ascii_num2.append(ord(y)-48) 
     mul_list=[] 
     k=0 
     num2='*'+num2 
     len1=len(num1) 
     len2=len(num2) 
     len3=len(result_str) 
     max=MAX(len1,len2,0) 
     line='-'*max 
     for dig2 in reversed(ascii_num2): 
      new=dig2*(num1_int) 
      new_str=str(new)+' '*k 
      mul_list.append(new_str) 
      k+=1   
     count=len(mul_list) 
     max=MAX(len1,len2,len3) 
     num1=' '*(max-len1)+num1 
     num2=' '*(max-len2)+num2 
     line=' '*(max-len(line))+line 
     another_line='-'*max 
     for i in range(0,count): 
      str=mul_list[i] 
      str=' '*(max-len(str))+str 
      mul_list[i]=str 
     print num1 
     print num2 
     print line 
     for i in range(0,count): 
      print mul_list[i] 
     print another_line 
     print result_str 
     print '\n' 
     result=0 
    #....print num1,num2 
+6

感觉像分享回溯? –

+0

你可以发布整个回溯? –

+5

你为什么要发明自己的'max'功能? – mishik

回答

8

如果您已经发布了全traseback的要求,人们可以你帮助过更快吗?

但我发现这个问题还是:你与另一个对象覆盖内置str

another_line='-'*max 
    for i in range(0,count): 
     str=mul_list[i] 
     str=' '*(max-len(str))+str 
     mul_list[i]=str 

在此之后,str没有内置的字符串类型的任何时间较长,但具体的,程序相关的值。

str(new) 

的调用将失败之后,作为新指定的值不赎回,不像原来的类型。

相关问题