我在所有程序中都遇到了一个困难。问题是,如果没有显式可写的变量名称,我就无法成功更改函数或类中的全局变量。
这是我无法工作的最后一个例子:
对于上下文,类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
gameDict
是gameDictList[i]
,i
是处于危险中的游戏。
我对问题的理解如下:我不能更改gameDict[box]
重定向到的类变量,但我也不能将其声明为全局变量,因为它的名称取决于情况。我也不能在程序中写入global game1.qtime
,除非我想在程序中引发错误。我的问题是,有没有办法让它发挥作用?我是否应该重新设计我的程序结构,并用可预测的参数列表构建这些方法(第一个项目总是引用qtime
,第二个nq
…(,这会使我的代码复杂化,并限制我只能使用参数;是不是我做错了什么?
我感谢你读到这篇文章,希望能找到答案。
William
我认为从dict改为list根本没有帮助。
在您的代码示例中,为什么希望CM1game.qtime
发生更改?
因此,要解开它,似乎有一个类Game
,它的参数类似于qtime
。
然后,您需要显示输入框,其中每个输入框都与给定的游戏实例和给定的参数相关联。
因此,在代码的某个地方,你需要建立这种连接,最好明确这种连接,例如通过一个字典将输入框映射到他们应该修改的相关游戏对象。这比依赖全局变量名的格式要好得多。