未看到变量 bullPostion
Variable bullPostion is not being seen
我有 2 个变量,分别称为“cowPosition”和“bullPosition”,但是在函数内部看不到它
这是我的代码片段
cowPosition = 1
bullPosition = 1
def gameplay():
setposition(True) # Sets the starting position for both bull and cow
while cowPosition or bullPosition >= 25:
bullPosition += 1
print(bullPosition)
我也想要它做的是它会循环 25 次直到 bullPosition = 25
您遗漏了一些有关 Python 变量范围的基本知识。 cowPosition
和 bullPosition
都是所谓的 全局 space 的一部分。 gameplay
方法不允许修改该变量,因为 cowPosition
和 bullPosition
都不在 gameplay
的 局部范围 内。
虽然你可以这样做:
my_variable = 1
def my_func():
print(my_variable) # print does not modify my_variable
您正在尝试使用此行修改 bullPosition
的值:
bullPosition += 1
您不能 更改该变量的值,除非您使用 global
关键字指定。例如,您不能这样做:
my_variable = 1
def my_func():
my_variable += 1 # this expression would modify my_variable
抛出:
UnboundLocalError: local variable 'my_variable' referenced before assignment
def my_func():
global my_variable # specify that you want to modify variable
my_variable += 5
my_variable = my_variable + 1
警告
虽然使用 global
似乎是一个神奇的修复方法,但通常不鼓励使用它,尤其是在较大的程序中。这样做的原因是您最终可能会意外地改变全局变量的值(更改值 and/or 类型)。你可以想象,如果你有使用 global
关键字来改变变量的函数,那么追踪这样的错误会有多困难。相反,您可以将它们作为参数传递:
gameplay(cowPosition, bullPosition):
...
gameplay(1, 1)
快速解决方案是声明局部变量而不是全局变量:
def gameplay():
cowPosition = 1
bullPosition = 1
while cowPosition or bullPosition >= 25:
bullPosition += 1
print(bullPosition)
要了解这是如何工作的,我建议您阅读本地范围和全局范围之间的区别。
你做的所有问题:
- 变量应该在函数内部
- 您在 while 循环中放置了错误的运算符它应该是 < 不是 >= 否则它将成为一个永远的循环
- 在 while 循环中你已经放置了一个 or 语句所以即使 bullPosition 是 25 它仍然会 运行 因为 cowPosition 不是 25(如果你希望它是那样的话这不是错误)
最终代码:
def gameplay():
cowPosition = 1
bullPosition = 1
while cowPosition or bullPosition < 25:
bullPosition += 1
print(bullPosition)
如果你想在函数外部使用变量,只需将它们设为全局变量,如下所示:
def gameplay():
global cowPosition = 1
global bullPosition = 1
while cowPosition or bullPosition < 25:
bullPosition += 1
print(bullPosition)
我有 2 个变量,分别称为“cowPosition”和“bullPosition”,但是在函数内部看不到它
这是我的代码片段
cowPosition = 1
bullPosition = 1
def gameplay():
setposition(True) # Sets the starting position for both bull and cow
while cowPosition or bullPosition >= 25:
bullPosition += 1
print(bullPosition)
我也想要它做的是它会循环 25 次直到 bullPosition = 25
您遗漏了一些有关 Python 变量范围的基本知识。 cowPosition
和 bullPosition
都是所谓的 全局 space 的一部分。 gameplay
方法不允许修改该变量,因为 cowPosition
和 bullPosition
都不在 gameplay
的 局部范围 内。
虽然你可以这样做:
my_variable = 1
def my_func():
print(my_variable) # print does not modify my_variable
您正在尝试使用此行修改 bullPosition
的值:
bullPosition += 1
您不能 更改该变量的值,除非您使用 global
关键字指定。例如,您不能这样做:
my_variable = 1
def my_func():
my_variable += 1 # this expression would modify my_variable
抛出:
UnboundLocalError: local variable 'my_variable' referenced before assignment
def my_func():
global my_variable # specify that you want to modify variable
my_variable += 5
my_variable = my_variable + 1
警告
虽然使用 global
似乎是一个神奇的修复方法,但通常不鼓励使用它,尤其是在较大的程序中。这样做的原因是您最终可能会意外地改变全局变量的值(更改值 and/or 类型)。你可以想象,如果你有使用 global
关键字来改变变量的函数,那么追踪这样的错误会有多困难。相反,您可以将它们作为参数传递:
gameplay(cowPosition, bullPosition):
...
gameplay(1, 1)
快速解决方案是声明局部变量而不是全局变量:
def gameplay():
cowPosition = 1
bullPosition = 1
while cowPosition or bullPosition >= 25:
bullPosition += 1
print(bullPosition)
要了解这是如何工作的,我建议您阅读本地范围和全局范围之间的区别。
你做的所有问题:
- 变量应该在函数内部
- 您在 while 循环中放置了错误的运算符它应该是 < 不是 >= 否则它将成为一个永远的循环
- 在 while 循环中你已经放置了一个 or 语句所以即使 bullPosition 是 25 它仍然会 运行 因为 cowPosition 不是 25(如果你希望它是那样的话这不是错误)
最终代码:
def gameplay():
cowPosition = 1
bullPosition = 1
while cowPosition or bullPosition < 25:
bullPosition += 1
print(bullPosition)
如果你想在函数外部使用变量,只需将它们设为全局变量,如下所示:
def gameplay():
global cowPosition = 1
global bullPosition = 1
while cowPosition or bullPosition < 25:
bullPosition += 1
print(bullPosition)