未看到变量 BullPostion

问题描述

我有 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

解决方法

快速解决方案是声明局部变量而不是全局变量:

def gameplay():
    cowPosition = 1
    bullPosition = 1
    while cowPosition or bullPosition >= 25:
        bullPosition += 1
        print(bullPosition)

要了解这是如何工作的,我建议您阅读有关局部作用域和全局作用域之间的区别。

,

您缺少有关 Python 变量作用域的一些基本知识。 cowPositionbullPosition 都是所谓的全局空间的一部分。 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:赋值前引用了局部变量“my_variable”

def my_func():
    global my_variable # specify that you want to modify variable

    my_variable += 5
    my_variable = my_variable + 1

警告

虽然使用 global 似乎是一个神奇的修复,但通常不鼓励使用它,尤其是在较大的程序中。这样做的原因是您最终可能会意外地改变(改变值和/或类型)全局变量。您可以想象,如果您的函数使用 global 关键字来改变变量,那么追踪这样的错误会有多困难。相反,您可以将它们作为参数传递:

gameplay(cowPosition,bullPosition):
    ...

gameplay(1,1)
,

你遇到的所有问题:

  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)