我开始学习python,然后尝试使用pyqt制作图灵机应用程序。我从 QTextEdit
获得一些"代码",然后将其放入dict
中,然后得到类似的东西:
{'1': {'a': ['s', 'D', '2'], 's': ['s', 'G', '2']}, '2': {'a': ['a', 'D', '1']}}
我具有此功能,其中 table
是一个dict:
def execute_TM(self, table, ruban, etat1):
self.Ruban.position = 1
self.table = table
etatAct = etat1
while etatAct != 'stop':
symb = self.Ruban.lire_cellules()
# print symb
print self.table
nvSymb = self.table[etatAct][symb][0]
self.Ruban.ecrire(nvSymb)
if table[etatAct][symb][1] == 'D':
self.Ruban.deplacement_droite()
if table[etatAct][symb][1] == 'G':
self.Ruban.deplacement_gauche()
else:
print
"erreur code deplacement"
etatAct = table[etatAct][symb][2]
我得到了这个错误:
nvSymb = self.table[etatAct][symb][0]
TypeError: string indices must be integers
我一直在阅读很多有关此错误的文章,并尝试了不同的事情...但是我仍然不明白。
编辑:多亏了您的帮助,我要理解,因此,如果我有:
table={'1': {'a': ['s', 'D', '2'], 's': ['s', 'G', '2']}, '2': {'a': ['a', 'D', '1']}}
,然后我想从主键'1'
和键's'
获取列表的第二个元素: 'G'
我可以打电话给table['1']['s'][1]
,所以它类似:
table["here it's a string"]["here it's also a string"]["here it's an integer"]
它有效:
>>> table={'1': {'a': ['s', 'D', '2'], 's': ['s', 'G', '2']}, '2': {'a':['a', 'D', '1']}}
>>> etatAct='1'
>>> symb='s'
>>> table[etatAct][symb][1]
'G'
我仍然不明白为什么它在功能中不起作用..
edit2:
使用type()
,我发现self.table
不是dict
,而是PyQt4.QtCore.QStringList
任何人都知道如何轻松转换它?
您将了解此错误是什么,
In [10]: a = 'Hellooo'
In [11]: print a[0]
H
In [12]: print a['0']
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-12-175cb7ceb755> in <module>()
----> 1 print a['0']
TypeError: string indices must be integers, not str
在您的代码中,试图用字符串而不是字典索引字符串。
从您的错误中清楚地表明(etatact,symb)的一个索引不是整数,而是字符串。
nvSymb=self.table[etatAct][symb][0]
TypeError: string indices must be integers
您可以通过将其转换为整数来尝试。
nvSymb=self.table[int(etatAct)][int(symb)][0]
您应该接受此:
nvSymb=self.table[etatAct][symb][0]
与众
tmp = self.table[etatAct]
nvSymb = tmp[symb][0]
,看看self.table
还是self.table[etaAct]
是由非授权者索引的字符串。首先要知道您可以解决此输入的知识。