python - Python 中的全局名称

标签 python python-2.7

我想知道两个数字 N1N2 是否是相同数字的排列。例如 123321 是相同数字的排列,而 234123 不是。我已经使用 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 中检查了以下答案,但我无法解决我的问题。

Help Defining Global Names

Use of "global" keyword in Python

我认为在 Python 中您不必声明任何变量,您可以简单地使用它们。我这个假设错了吗?

有什么建议吗?谢谢。

最佳答案

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

问题很简单,您在尝试附加到它们之前没有定义 arr1arr2。您需要在该函数中定义它们,以及s1s2kfl.

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

关于python - Python 中的全局名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16333240/

相关文章:

Python for循环遍历目录文件

python - 连接 Django 调试工具栏时出现问题

python - 如何将 psd 工具与 python 一起使用

python - 如何在退出框架上获取MessageDialog?

python - Pycharm 中的自动光标定位

python - 如何从具有特定阈值的列表(包含 1 到 n 个值)中随机选择一个否?

python - 不使用第三方库在 Python 中逆向已知算法

python - python中twistd应用程序的终止

python - 如何根据插入的内容确定 SQL 列值的优先级?

python - Python 上的 MongoDB Atlas 身份验证失败