2013-07-15 2 views
-1

Я новичок в Python я geeting ошибку TypeError: 'str' object is not callableTypeError: «ул» объект не вызываемая питон

при входе

3 
111+23 
1638-1350 
1992+133 

затем порграммы успешно работать, но когда строка ввода содержит «* 'означает мое другое состояние, то это агония TypeError

, например, если вход

3 
111*23 
1638-1350 
110+456 

затем получил TypeError об ошибке: «ул» объект не вызываемая

вот мой код ссылку на 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) 

потерпит неудачу после этого, как только что присвоенное значение не отозваны, в отличие от исходного типа.

Смежные вопросы