【问题标题】:How to change an element of a local NumPy array ( which is inside a function ) from outside?如何从外部更改本地 NumPy 数组(在函数内部)的元素?
【发布时间】:2021-06-02 07:22:51
【问题描述】:

我正在开发一个游戏项目,并希望使用 NumPy 数组创建一个游戏板。所以我为此定义了一个函数 board() 。但是当我尝试改变板子的一个元素时,它并没有改变。

代码

import numpy as np

def board():
    game = np.zeros((6, 6))
    return game

board()[1, 1] = 6  

print(board()[1, 1])  # Expected Output = 6, Instead it gives 0

我猜局部和全局变量存在一些问题。我在这个网站上搜索了它,但没有找到预期的解决方案。我知道如何更改在函数内部调用的全局变量,但我不知道如何更改局部变量。任何帮助将不胜感激。

【问题讨论】:

  • board 每次调用时都会创建一个 new 板:board()[1, 1] = 6 创建一个新板,更改位置 1, 1然后将其丢弃;print(board()[1, 1]) 创建一个新板并查看其1, 1 位置。两人共用一块板。
  • 您能说明一下您希望它如何工作吗?拥有board() 函数的目的是创建一个新的 板。修改板的目的是拥有一个板。你想要这两个中的哪一个?
  • 在游戏的某些阶段,我想将棋盘的值更改为一个数字。而这些价值变化将是永久性的
  • 您可以像 Corralien 的回答那样创建一个全局变量,或者向您的 board() 函数添加参数(例如,坐标:元组,值:int)并使用这些参数更改 game 变量。
  • 你好@nick 我对你的建议很感兴趣。您能否将其发布为带有代码的答案

标签: python numpy local-variables


【解决方案1】:

请参阅上面@MisterMiyagi 的第一条评论以获取解释。

import numpy as np

def board():
    game = np.zeros((6, 6))
    return game

b = board()
b[1, 1] = 6  
>>> b[1, 1]
6.0

【讨论】:

    【解决方案2】:
    import numpy as np
    
    def board(coordinates: tuple = None, value: int = None):
        game = np.zeros((6, 6))
        if coordinates and value:
            game[coordinates] = value
        return game
    
    print(board((1, 1), 6)) 
    

    【讨论】:

    • 请您详细说明一下,以便我了解发生了什么。如果您解释一下,我会将其标记为答案
    • 如何在代码的其他地方使用板的特定元素。每次都是印刷板
    • 我在函数中添加了参数(参见w3schools.com/python/python_functions.asp)这些参数修改了函数内部的game变量。
    • 如果你想要板子的一个特定元素,你需要索引它。 board((1, 1), 6)[1,1] 但这真的很难看。然后你应该将你的板存储在一个变量中。
    • 是的,当我更改电路板的许多元素时,这变得太复杂了。好吧,谢谢你付出的努力
    猜你喜欢
    • 2021-04-28
    • 1970-01-01
    • 1970-01-01
    • 2021-01-14
    • 2018-04-15
    • 2018-04-06
    • 2017-03-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多