Python: TypeError: 'str'对象在if语句中不可调用

-1 投票
4 回答
1145 浏览
提问于 2025-04-18 15:08

我看过50多个类似标题的帖子,但还是没有找到我想要的答案。

如果这个问题是重复的,请给我链接到那个[已解决]的帖子。我使用的是Python 2.7.7

count = 0
playerChoice = str(raw_input("What do you do this turn? "))

if playerChoice() == 'r':
    count = count + 1
    print "Added one bullet. ", count

它给出的错误是:

if playerChoice() == 'r':
TypeError: 'str' object is not callable

根据我的理解,我的代码是这样工作的:

如果玩家输入字符串'r',那么计数会加一,打印语句应该显示:“增加了一颗子弹。”但是,当你在raw_input中输入'r'时,它却报错了。为什么会这样呢?我试着在raw_input中加上%s(我在另一个帖子上看到的),但那并没有解决问题。

希望能得到帮助,谢谢。

4 个回答

0

因为 playerChoice 是一个变量,而不是一个函数的调用,所以使用 playerChoice 时不需要加括号。如果你写成 playerChoice(),解释器会试图去调用一个方法,但会失败,因为 playerChoice 并不是指向一个函数。

这里需要理解的是,str(raw_input("What do you do this turn? ")) 返回的是一个字符串,而不是一个函数。因此,你不需要使用括号。

0

playerChoice 是一个变量,不是一个函数。你应该这样使用:

if playerChoice == 'r':

而不是 playerChoice()

2

在这段代码中,if playerChoice() == 'r': 应该改成 if playerChoice == 'r':,也就是去掉括号 ()

因为你不能把一个字符串当成函数来调用。

另外,raw_input("What do you do this turn? ") 本身已经是一个字符串了,所以不需要再转换。

如果你想要一个 int(整数):

你需要这样写 int(raw_input("What do you do this turn? ")),但对于字符串来说就不需要转换了。

2

playerChoice 是一个字符串。当你后面加上 () 调用它,比如 playerChoice(),就会出错,因为字符串不能像函数那样被调用。

应该直接使用 playerChoice 来获取这个字符串的值:

playerChoice = raw_input("What do you do this turn? ")

if playerChoice == 'r':
    count += 1
    print "Added one bullet. ", count

撰写回答