7

我想知道两个数字N1N2是否是相同数字的排列。例如123,and321是相同数字的排列,其中 as234123not。我使用 Python 来解决我不是专家的问题。我正在IDLE Python GUI使用Windows 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 中您不必声明任何变量,而是可以简单地使用它们。我对这个假设错了吗?

有什么建议么?谢谢你。

4

2 回答 2

3

这里不需要对全局值做任何事情。一切都应该包含在函数中。

问题只是您没有定义arr1arr2在尝试附加到它们之前。您需要在该函数中定义它们,以及s1、和。s2kfl

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

于 2013-05-02T08:16:03.537 回答
1

您需要在函数中定义数组。然后附加到它。arr1 = []定义一个空数组。

arr1[k] = 2

尝试更改 index 处的值k。因此,您应该将其初始化为特定大小或附加到空数组(使用该append函数)。

此外,如果您想从函数外部访问数组,您可能希望从函数返回数组

于 2013-05-02T08:29:55.313 回答