-3

这是我的脚本,http ://pastebin.com/zgRrBX0U

作为参考,这是 Zed Shaw 的“Learning python the hard way”的 ex36 脚本。我试图创建一个基于塞尔达传说第一级设计的基于文本的冒险。

但是当我开始进入程序时,我遇到了一个问题。它可以让您从主房间开始。但无论往哪个方向走,都会有错误的说法。“‘int’对象是不可调用的。” 我无法通过搜索弄清楚这意味着什么。或者查看 pydocs。任何帮助将不胜感激。

4

4 回答 4

2

您将roomBAand定义roomDA为函数,然后……您将它们绑定到整数。当然,它不会起作用。

于 2012-04-10T22:48:51.347 回答
2

正如 Ignacio 所说,删除第 129 和 130 行,它将起作用。

在 Python 中,“可调用”通常是一个函数。该消息意味着您将一个数字(一个“int”)视为一个函数(一个“可调用”),所以 Python 不知道该做什么,所以它停止了。

于 2012-04-10T22:53:08.430 回答
1

第 47 行:

def roomBA(key, life, door_open, roomBA, roomDA):

您在这里定义了一个名为 roomBA 的函数。

第 129 行:

roomBA = 0

在这里,您现在已将 roomBA 更改为数字 0。

因此,您定义的原始函数丢失了。你不再有一个名字可以用来称呼它了。

在第 132 行:

roomCA(key, life, door_open, roomBA, roomDA)

在这里,您调用的是函数 roomCA。除其他外,此函数向玩家询问方向,然后尝试调用相应的房间函数。

我输入了 west,所以我们尝试调用变量 roomBA 引用的函数(第 17 行)。但是,哦不,它不再是一个函数。它是 0。因此,你是错误的。

发生的事情是函数名称和变量名称之间有很多冲突。当然,roomXX 是代表游戏中每个房间的函数。然后,你有状态变量(现在也被命名为 roomXX)。这些变量似乎旨在跟踪您之前是否进入过房间。由于您的函数和状态变量都被命名为相同的东西,所以您正在做各种意想不到的事情。

正如上面提到的,您可以删除第 129 行和第 130 行以使代码运行;但是,您可能需要更好地了解基础知识。这是一个开始的地方:

http://en.wikipedia.org/wiki/Scope_%28computer_science%29

于 2012-04-10T23:03:20.530 回答
0

一个错误的说法。“‘int’对象是不可调用的。” 我无法通过搜索弄清楚这意味着什么。

您应该通过了解语言和英语的基础知识来弄清楚这意味着什么。

该错误表示'int'对象不可调用。调用是你对函数(和类似的东西)所做的,所以你有一个 int ,你认为你有一个函数(或类似的东西)。这是因为您已将函数名称重新绑定到 int。

在 Python 中,您现在应该知道:

  1. 一切都是对象,甚至函数。

  2. 直到运行时才检查类型。

  3. 值有类型,而不是变量(实际上是名称)。

所以没有什么能阻止你写:

function a(): pass
a = 1

第一行创建一个函数对象,并将其绑定到 name a。第二行将整数绑定1到 name a。这取代了旧的绑定,因此不再是函数的a名称。

于 2012-04-10T23:07:17.190 回答