使用全局变量验证用户输入

时间:2014-11-26 20:28:46

标签: python variables global

我希望用户输入1到4之间的数字并检查它们是否在此范围内。我修改了一些我在Stack Overflow上找到的代码。这是验证的好方法吗?我可以访问变量guessXguessY而不将它们声明为全局变量吗?

我收到错误:

  

SyntaxWarning:name' guessY'被分配到全局声明之前

我的代码:

def validNum(guessX,guessY):
    if guessX < 1 or guessY < 1 or guessX > 4 or guessY > 4:
        print ("Guess is not in range and should be between \
               1 and 4. Try again.")
        return 0

    else:
        return 1

def getInput():
    while 1:
        guessX = int(input("Enter your guess for the X coordinate: "))
        guessY = int(input("Enter your guess for the Y coordinate: "))

        if validNum(guessX, guessY):
            break
    print ("good: %s is a valid coordinate for X." % guessX)
    print ("good: %s is a valid coordinate for Y." % guessY)
    # Is it a bad idea to declare guessX and GuessY as global?
    global guessX
    global guessY

1 个答案:

答案 0 :(得分:1)

从技术上讲,这不是一个错误。相反,Python警告您的代码可能不正确。

具体而言,它抱怨您在使用guessX宣布它们为全局之前使用了名称guessYglobal。执行此操作的代码不是关于名称的全局状态,而是通常无效或逻辑上存在缺陷。

要解决此问题,只需将全局声明移至函数顶部:

def getInput():
    global guessX
    global guessY
    ...

或者更简单:

def getInput():
    global guessX, guessY
    ...

实际上,global声明应始终位于函数的顶部,以便它们易于显示。

但请注意,最好避免在Python中使用全局变量。大多数情况下,程序中存在global x意味着设计需要重新设计。