Python中的全局名称


问题内容

我想找出两个数字 N1N2
是否是相同数字的排列。例如123321是相同数字的排列,而as234123not。我已经使用Python解决了我不是专家的问题。我使用IDLE Python GUIWindows 7。规格是Python 2.7.3 (default, Apr 10 2012, 23:31:26) [MSC v.1500 32 bit (Intel)] on win32

Python代码如下所示,

def k(n, m):
    s1 = n
    s2 = m
    k = 0
    fl = 0
    while k < 10 :
        arr1[k] = 0
        arr2[k] = 0
        k = k + 1
    while s1 > 0 :
        t = s1 % 10
        arr1[t] = 1
        t = s2 % 10
        arr2[t] = 1
        s1 = s1 / 10
        s2 = s2 / 10
    k = 0
    while k < 10 :
        if arr1[k] != arr2[k]:
            fl = 1
        k = k + 1
    return fl

我将文件另存为,k.py并使用以下命令导入import k。但是,当我尝试执行代码k.k(123, 321)时,出现以下错误。

Traceback (most recent call last):
  File "<pyshell#7>", line 1, in <module>
    k.k(123,321)
  File "k.py", line 7, in k
    global arr2
NameError: global name 'arr1' is not defined

我试图声明数组如下

arr1 = []
arr2 = []

我也尝试过

global arr1 = []
global arr2 = []

global arr1
global arr2

但是我仍然遇到同样的错误。我的代码有什么问题?

我已经在 SO中 检查了以下答案,但无法解决问题。

帮助定义全局名称

在Python中使用“全局”关键字

我相信,在Python中,您不必声明任何变量,而只需使用它们即可。 我对这个假设有误吗?

有什么建议?谢谢。


问题答案:

这里无需对全局值做任何事情。一切都应包含在函数内。

问题很简单,就是您没有定义arr1arr2尝试附加到它们之前。您需要定义它们 在功能 ,随着s1s2kfl

编辑 我应该补充一点,您的代码非常不符合Python规范。所有这些具有递增计数器的while循环都应替换为for循环:for k in range(10)等等。但是第一个循环甚至不是必需的-您应该具有arr1 = [0] * 10和相同的循环arr2