Python中的全局名称

我想知道两个数N1N2是否是相同数字的排列。 例如, 123321是相同数字的排列,其中234123不是。 我用Python解决了我不是专家的问题。 我在Windows 7上使用IDLE Python GUI 。 规范是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 。 但是当我试图执行代码为kk(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

编辑我应该补充说你的代码是非常不合理的。 所有这些带递增计数器的while循环都应该用for循环代替: for k in range(10)等等。但是第一个循环甚至不是必须的 - 你应该有arr1 = [0] * 10arr2相同。


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

arr1[k] = 2

试图改变索引k的值。 因此,要么将其初始化为特定大小,要么追加到空数组(使用append函数)。

另外,如果你想从函数外部访问数组,你可能想从函数返回数组

链接地址: http://www.djcxy.com/p/71315.html

上一篇: Global name in Python

下一篇: How to store in a DB & transfer using JSON?