我希望用户输入1到4之间的数字并检查它们是否在此范围内。我修改了一些我在Stack Overflow上找到的代码。这是验证的好方法吗?我可以访问变量guessX
和guessY
而不将它们声明为全局变量吗?
我收到错误:
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
答案 0 :(得分:1)
从技术上讲,这不是一个错误。相反,Python警告您的代码可能不正确。
具体而言,它抱怨您在使用guessX
宣布它们为全局之前使用了名称guessY
和global
。执行此操作的代码不是关于名称的全局状态,而是通常无效或逻辑上存在缺陷。
要解决此问题,只需将全局声明移至函数顶部:
def getInput():
global guessX
global guessY
...
或者更简单:
def getInput():
global guessX, guessY
...
实际上,global
声明应始终位于函数的顶部,以便它们易于显示。
但请注意,最好避免在Python中使用全局变量。大多数情况下,程序中存在global x
意味着设计需要重新设计。