我遇到了一个在所有程序中都会遇到的困难。问题是,如果我没有显式可写的变量名称,我就不能成功地更改函数或类中的全局变量。
这是我不能工作的最后一个例子:
对于上下文,inputBox类允许用户在窗口中显示的框中输入文本,该框存储在属性编辑器( attribute self.text )中。game类将问答式游戏的许多参数组合在一起,例如每个问题的时间(qtime)、问题的数量(nq)……我根据以下原型结构将所有游戏的所有方框分组到一个字典列表中:gameDictList = [{game1qtime : 20, game1nq : 10}, {game2qtime : 15, game2nq : 5}], etc
我想要做的是根据用户在inputBoxes中输入的内容来更改game参数,但是如果我这样写:
for box in gameDict :
gameDict[box] = int(box.text)
print(gameDict[box]) # print the modified value
print(CM1game.qtime) # print the (unfortunately) unchanged valuegameDict是gameDictList[i],i是危险的游戏。
我对这个问题的理解如下:我不能更改gameDict[box]重定向到的类变量,但我也不能将它声明为全局变量,因为它的名称取决于具体情况。我也不能在我的程序中编写global game1.qtime,除非我想在我的程序中引发错误。我的问题是,有没有一种方法可以让它启动并运行?我是否应该重新设计程序的结构,并使用可预测的参数列表(第一项总是引用qtime,第二项总是引用nq...)来构建这些方法,这会使我的代码变得复杂,并限制我只能使用我可以使用的参数;我是不是做错了什么?
我感谢你阅读这篇文章,希望能找到答案。
威廉
发布于 2021-05-10 22:38:14
我不认为从dict到list的改变有任何帮助。
在您的代码示例中,为什么会期望CM1game.qtime发生变化?
因此,为了解决这个问题,似乎你有一个类Game,它有像qtime这样的参数。
然后,您希望显示输入框,其中每个输入框都与给定的游戏实例和给定的参数相关联。
因此,在你的代码中的某个地方,你需要建立这种连接,最好是显式地建立这种连接,例如,通过一个字典将输入框映射到他们应该修改的相关游戏对象。这比依赖全局变量名的格式要好得多。
https://stackoverflow.com/questions/67471244
复制相似问题