Python中的全局名称
我想知道两个数N1和N2是否是相同数字的排列。 例如, 123
和321
是相同数字的排列,其中234
和123
不是。 我用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中,你不必声明任何变量,只需使用它们即可。 这个假设我错了吗?
有什么建议么? 谢谢。
这里没有必要对全球价值做任何事情。 一切都应该包含在该功能中。
问题很简单,您在尝试附加到arr1
或arr2
之前未定义它们。 您需要在该函数中定义它们以及s1
, s2
, k
和fl
。
编辑我应该补充说你的代码是非常不合理的。 所有这些带递增计数器的while循环都应该用for循环代替: for k in range(10)
等等。但是第一个循环甚至不是必须的 - 你应该有arr1 = [0] * 10
和arr2
相同。
您需要在函数中定义数组。 然后追加到它。 arr1 = []
定义一个空数组。
arr1[k] = 2
试图改变索引k
的值。 因此,要么将其初始化为特定大小,要么追加到空数组(使用append
函数)。
另外,如果你想从函数外部访问数组,你可能想从函数返回数组
链接地址: http://www.djcxy.com/p/71315.html