2

我收到一条错误消息“TypeError: 'str' object is not callable”;这是我的代码:

m=input()  
while(m!='0'):  
    c=0  
    for letter in range(len(m)):  
        if(m(letter) == '1'or '2'):  
            c++  
        if((m(letter) == '7'or'8'or'9') and (m(letter -1)=='2')):  
            c--  
        if(m(letter)=='0'):  
            c--  
    print(c)  
    m=input()  

这个错误是什么意思?

4

3 回答 3

3

你有几个问题:

  1. Python 使用方括号进行索引:m[letter].
  2. Python 没有后增量运算符。你必须使用c += 1.
  3. a == 'b' or 'c' or 'd'被解释为(a == 'b') or ('c') or ('d'),这将永远是True。你想做的a in ('b', 'c', 'd')
于 2013-08-18T09:49:05.837 回答
2

错误是说您正在尝试调用一个字符串,并且它是不可调用的。看起来您想从字符串中的指定位置获取字符。然后,使用m[letter]代替m(letter).

此外,您的 if 条件不正确,例如,if(m(letter) == '1'or '2'):您应该使用代替in,如下所示:if m[letter] in ('1', '2')

此外,在 python中没有++and ,使用and代替。--+=1-=1

while此外, andif条件中有一些多余的括号。

这是改进的代码:

m = str(input())
while m != '0':
    c = 0
    for letter in range(len(m)):
        if m[letter] in ('1', '2'):
            c += 1
        if m[letter] in ('7', '8', '9') and m[letter - 1] == '2':
            c -= 1
        if m[letter] == '0':
            c -= 1
    print(c)
    m = str(input())

希望有帮助。

于 2013-08-18T09:49:33.093 回答
1

无论是字符串还是列表,索引都应该使用方括号来完成。所以使用

m[letter]

而不是m(letter). By using paranthesis, you are calling a functionm`,这会引发错误,因为 m 不是函数,而只是一个字符串

于 2013-08-18T09:48:33.717 回答