未看到变量 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 变量范围的基本知识。 cowPositionbullPosition 都是所谓的 全局 space 的一部分。 gameplay 方法不允许修改该变量,因为 cowPositionbullPosition 都不在 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)

要了解这是如何工作的,我建议您阅读本地范围和全局范围之间的区别。

你做的所有问题:

  1. 变量应该在函数内部
  2. 您在 while 循环中放置了错误的运算符它应该是 < 不是 >= 否则它将成为一个永远的循环
  3. 在 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)