我是python的新手我正在纠错 TypeError: 'str' object is not callable
当输入是
3
111+23
1638-1350
1992+133
Run Code Online (Sandbox Code Playgroud)
然后porgram运行成功,但当输入字符串包含'*'表示我的其他条件然后它throe TypeError
例如,如果输入是
3
111*23
1638-1350
110+456
Run Code Online (Sandbox Code Playgroud)
然后得到错误TypeError:'str'对象不可调用
这是我的代码链接到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
Run Code Online (Sandbox Code Playgroud)
如果您按照要求发布完整的追溯,人们可以让您更快地帮助.
但我发现了这个问题:你str用另一个对象覆盖内置:
another_line='-'*max
for i in range(0,count):
str=mul_list[i]
str=' '*(max-len(str))+str
mul_list[i]=str
Run Code Online (Sandbox Code Playgroud)
在此之后,str不再是内置字符串类型,而是具体的,与程序相关的值.
像这样的电话
str(new)
Run Code Online (Sandbox Code Playgroud)
之后将失败,因为新分配的值不可调用,与原始类型不同.