未定义类全局名称

时间:2015-05-21 13:43:52

标签: python python-2.7

我创建了一个简单的python类,代码如下所示。

class Solution38:
    def countAndSay(self, n):
        self.n = n
        a[0] = 1
        for t in range(n):
            s = str(a[t])
            l = len(s)
            b = '1'
            c = 0
            f = []
            for d in range(l):
                if s[d] == b:
                    c = c+1
                else:
                    m = str(c)+str(b)
                    b = s[d]
                    c = 1
                    f = f+str(m)
        return f



solution = Solution38()
print solution.countAndSay(4)

当我试图运行它时,它说"全球名称' a'未定义"。 此外,当我将a[0]更改为self.a[0]时,会弹出另一个错误,并说明"解决方案38实例没有属性' a'"。

任何人都可以帮我解决这个问题吗?

谢谢!

4 个答案:

答案 0 :(得分:2)

这样的东西
a = 5

创建变量a。像

这样的东西
a[0]

使用变量a,因此它必须已存在。在你的情况下,它没有。

答案 1 :(得分:1)

问题在于a[0] = 1b = 1不同。您可以直接将1分配给名称b,但在为其提供新值之前必须访问a的第一个成员,因此在更新之前必须存在a

self.n = n
for t in n:

这是错误的。我想你想要实现的是

for t in range(n):
如果我错了,请告诉我。

答案 2 :(得分:1)

"解决方案38实例没有属性' a'" - 发生此错误是因为您将= []声明为类变量而不是实例变量。稍后将[0]更改为self.a [0]将无法解决此问题。您需要从一开始就将其声明为self.a = {}。 https://docs.python.org/2/reference/compound_stmts.html#class-definitions

"但另一个错误是' int' ob不可迭代..,对于n中的t,'" 在这里,您的错误只是告诉您无法遍历单个int。你传递n = 4,怎么会循环呢? '对于4'没有意义。你应该看一下python中的range()函数

for t in range(n):
   :
   :

- 我不太确定你在这里想要做什么,但这应该有助于你迭代四次,如果这是你正在寻找的。 https://docs.python.org/2/library/functions.html#range

阅读本文并查看一些示例!如果您想继续编码,它们将非常有用。

答案 3 :(得分:0)

a中使用a=[]之前,您应该先调用a[0]=1来初始化a[0],因为a会尝试从可迭代def countAndSay(self, n): self.n = n a = [1] for t in n: s = str(a[t]) l = len(s) b = '1' c = 0 f = [] for d in l: if s[d] == b: c = c+1 else: m = str(c)+str(b) b = s[d] c = 1 f = f+str(m) return f 中获取第0个元素。然而,建议用一个元素初始化它:

public function prodcercanos()
{
    $cercanos = User::with('municipio')->with('productos')->get();
    $coordA   = Geotools::coordinate([44.4578589, 2.2951061999999998]); 
    foreach ($cercanos as $p) {
        $coordB   = Geotools::coordinate([$p->municipio->latitud,$p->municipio->longitud]);
        $distance = Geotools::distance()->setFrom($coordA)->setTo($coordB);
        echo $p->id;
        echo "<p>";
        echo $distance->in('km')->haversine();
        echo "</p>";
    }       
}