NameError:名称未定义全局声明

时间:2019-11-07 19:20:10

标签: python python-3.x

!/ bin / python3


import math
import os
import random
import re
import sys


# Complete the plusMinus function below.
def plusMinus(arr):
    for i in range(0,n):
        if arr[i] > 0:
            global contorPozitiv
            contorPozitiv += 1
        elif arr[i] == 0:
            global contorZero
            contorZero += 1
        else:
            global contorNegativ 
            contorNegativ += 1

    print (contorPozitiv / n)
    print (contorNegativ / n)
    print (contorZero / n)

if __name__ == '__main__':
    n = int(input())

    arr = list(map(int, input().rstrip().split()))

    plusMinus(arr)

我收到此错误:

Compiler Message
Runtime Error
Error (stderr)
Traceback (most recent call last):
  File "Solution.py", line 31, in <module>
    plusMinus(arr)
  File "Solution.py", line 20, in plusMinus
    contorNegativ += 1
NameError: name 'contorNegativ' is not defined

如果我在for之前声明变量并对其进行初始化,则可以正常工作。

为什么它不能与函数内部的全局声明一起使用?

2 个答案:

答案 0 :(得分:1)

您需要定义contorPositiv。我认为,呼吁全球人士在这里可能会是一个红鲱鱼。假设这些变量是全局变量,那么您调用contorPozitiv += 1等效于contorPozitiv = contorPozitiv + 1。该程序不知道contorPozitiv的值是什么,因此会崩溃。

在所有导入之后用简单的contorPozitiv = 0初始化值可能会解决此问题。所有其他变量都一样。

答案 1 :(得分:1)

  

必须定义一个变量才能使用。

将此添加到您的for循环上方。

contorPozitiv = 0
contorNegativ = 0
contorZero = 0