【问题标题】:Python, boolean resets itselfPython,布尔值自行重置
【发布时间】:2015-06-16 14:31:19
【问题描述】:

我正在使用 python 并且正在制作游戏,但有一点我没有得到。

为什么这个布尔值会重置?我不想重置布尔值'powerup'。

def spawnPowerup()
    number = 0
    powerup = False

    if (a certain thing happens, the thing happens for one frame.):
        number = random.randint(1,2)

    if number == 1 or powerup == True:
        print(powerup)
        powerup = True
        print(powerup)

这段代码背后的想法是,每当事情发生时,我都会得到一个数字。当数字等于 1 时,应该激活上电,但由于数字在整个变化的时候我需要这个布尔值。因此,每当数字等于 1 时,我都会更改布尔值,因此当数字等于 1 时,if 语句将始终为真。但问题是布尔值重置。如果事情发生了几次,这将被打印出来:

False
True
False
True
False
True
False
True

【问题讨论】:

  • 布尔重置是什么意思?你能多放一些 printlns 看看它是否在 number == 2 时重置?
  • 在第二个 if 语句中,powerup 的值将始终为 false,因为您在函数开头将其更改为 false
  • 每个人都在这里得到的是,您需要查看powerup 变量的范围。现在因为它在函数内部,所以它是一个每次都会重置的私有变量。考虑将powerup 放在spawnPowerup 之外的全局范围内。这将防止它在您每次调用 spawnPowerup 时被重置,除非您在函数本身内重置它。这是一篇关于范围 stackoverflow.com/questions/291978/… 的好文章参考
  • @Kyrubas 谢谢!我现在明白了!

标签: python boolean reset


【解决方案1】:

每次调用此函数时,powerup 都会设置为 False。所以当你击球时:

if number == 1 or powerup == True:
        print(powerup)
        powerup = True
        print(powerup)

number 必须是 1 如果您输入该块(除非您有其他未显示的代码)。因此,当您进行第一次打印时,powerup 仍然是 False。您设置为True,然后再次打印

【讨论】:

  • 我不知道确切的英文术语,但如果我没有在函数开头设置 powerup 等于 False,问题可能会得到解决。我也不想将它设置为 True,所以我只想对它不做任何事情,但让计算机知道它存在。我该怎么做,或者如果我做不到。你建议我应该怎么做才能解决这个问题?
  • 听起来你想要一个global 变量。您可以在函数外部对其进行初始化,让函数知道它存在,并在必要时对其进行更改。这篇文章应该会有所帮助:stackoverflow.com/questions/423379/…
【解决方案2】:

当你输入函数时,你总是将布尔值设置为 False,所以它自然会被重置。但这是一个局部变量;无论如何它都不存在于函数之外。

【讨论】:

  • 我不知道确切的英文术语,但如果我没有在函数开头设置 powerup 等于 False,问题可能会得到解决。我也不想将它设置为 True,所以我只想对它不做任何事情,但让计算机知道它存在。我该怎么做,或者如果我做不到。你建议我应该怎么做才能解决这个问题?
【解决方案3】:

这让你感到困惑:

if number == 1 or powerup == True:
    print(powerup)
    powerup = True
    print(powerup)

这里只会打印powerup 的值。在第一个print 语句中,值始终为False,而之后为True。只有在执行 if 块时才会将其打印出来,将 powerup 更改为 True。要对此进行更多探索,只需在 if 块之前添加 print(powerup)

【讨论】:

    猜你喜欢
    • 2020-08-14
    • 2019-10-20
    • 1970-01-01
    • 1970-01-01
    • 2013-03-20
    • 1970-01-01
    • 2022-12-13
    • 2021-10-18
    • 1970-01-01
    相关资源
    最近更新 更多