如何更改名称取决于上下文的全局变量?在python中



我在所有程序中都遇到了一个困难。问题是,如果没有显式可写的变量名称,我就无法成功更改函数或类中的全局变量。

这是我无法工作的最后一个例子:

对于上下文,类inputBox允许用户在窗口中显示的框中输入文本,该框存储在属性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 value

gameDictgameDictList[i]i是处于危险中的游戏。

我对问题的理解如下:我不能更改gameDict[box]重定向到的类变量,但我也不能将其声明为全局变量,因为它的名称取决于情况。我也不能在程序中写入global game1.qtime,除非我想在程序中引发错误。我的问题是,有没有办法让它发挥作用?我是否应该重新设计我的程序结构,并用可预测的参数列表构建这些方法(第一个项目总是引用qtime,第二个nq…(,这会使我的代码复杂化,并限制我只能使用参数;是不是我做错了什么?

我感谢你读到这篇文章,希望能找到答案。

William

我认为从dict改为list根本没有帮助。

在您的代码示例中,为什么希望CM1game.qtime发生更改?

因此,要解开它,似乎有一个类Game,它的参数类似于qtime

然后,您需要显示输入框,其中每个输入框都与给定的游戏实例和给定的参数相关联。

因此,在代码的某个地方,你需要建立这种连接,最好明确这种连接,例如通过一个字典将输入框映射到他们应该修改的相关游戏对象。这比依赖全局变量名的格式要好得多。

最新更新