【问题标题】:Why am I getting a "Referenced before assignment" error? [duplicate]为什么我会收到“分配前引用”错误? [复制]
【发布时间】:2022-01-23 05:59:50
【问题描述】:

此 Python 程序将确定输入数组是否为山数组。我在我制作的其他程序中找到了关于 stackoverflow 的相同错误的答案,但不是这个。当输入有效的山数组时,它似乎没有问题,但是当我更改测试数组的前半部分使其无效时,我遇到了问题。而不是它返回 False,这是目标,我收到了这个错误:UnboundLocalError: local variable 'y' referenced before assignment。另外,z 变量也出现了同样的错误,所以我添加了else 语句并修复了它。无法弄清楚为什么它也没有修复 y 变量。这是我的代码:

def validMountainArray(arr):
    maxElem = max(arr)
    maxIndex = arr.index(maxElem)
    if len(arr) < 3:
        return False
    else:
        beginning = arr[:maxIndex]
        end = arr[maxIndex + 1:]

        for i in range(1, len(beginning) - 1):
            if beginning[i + 1] > beginning[i]:
                y = True
            else:
                y = False
        for i in range(1, len(end) - 1):
            if end[i + 1] < end[i]:
                z = True
            else:
                z = False

        if y == True and z == True:
            return True
        else:
            return False

【问题讨论】:

  • 哪里出错了?
  • 如果您的 for 循环迭代零次,则永远不会创建 y

标签: python arrays function


【解决方案1】:

不保证会执行这些 for 循环。该范围可能以 0 数字结束,因此不会发生循环,并且永远不会分配 y 和/或 z。要解决此问题,请在函数开头将这些变量定义为 False。

def validMountainArray(arr):
    y = False
    z = False
    maxElem = max(arr)
    maxIndex = arr.index(maxElem)
    # etc
    

【讨论】:

    猜你喜欢
    • 2021-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-24
    相关资源
    最近更新 更多