Python中的全局名称
问题内容:
我想找出两个数字 N1 和 N2
是否是相同数字的排列。例如123
和321
是相同数字的排列,而as234
和123
not。我已经使用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中,您不必声明任何变量,而只需使用它们即可。 我对这个假设有误吗?
有什么建议?谢谢。
问题答案:
这里无需对全局值做任何事情。一切都应包含在函数内。
问题很简单,就是您没有定义arr1
或arr2
尝试附加到它们之前。您需要定义它们 在功能 ,随着s1
,s2
,k
和fl
。
编辑 我应该补充一点,您的代码非常不符合Python规范。所有这些具有递增计数器的while循环都应替换为for循环:for k in range(10)
等等。但是第一个循环甚至不是必需的-您应该具有arr1 = [0] * 10
和相同的循环arr2
。