我想知道两个数字 N1 和 N2 是否是相同数字的排列。例如 123
和 321
是相同数字的排列,而 234
和 123
不是。我已经使用 Python 解决了我不是专家的问题。
我在 Windows 7
上使用 IDLE Python GUI
。规范是 Win32 上的 Python 2.7.3(默认,2012 年 4 月 10 日,23:31:26)[MSC v.1500 32 位(英特尔)]
。
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 中检查了以下答案,但我无法解决我的问题。
Use of "global" keyword in Python
我认为在 Python 中您不必声明任何变量,您可以简单地使用它们。我这个假设错了吗?
有什么建议吗?谢谢。
最佳答案
这里不需要对全局值做任何事情。一切都应该包含在函数中。
问题很简单,您在尝试附加到它们之前没有定义 arr1
或 arr2
。您需要在该函数中定义它们,以及s1
、s2
、k
和fl
.
编辑 我应该补充一点,您的代码非常不符合 Python 风格。所有这些带有递增计数器的 while 循环都应该替换为 for 循环:for k in range(10)
等。但是第一个循环甚至不是必需的 - 你应该有 arr1 = [0 ] * 10
和 arr2
相同。
关于python - Python 中的全局名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16333240/