2

为什么inSetStates,inInputAlphisCorrectDirection变量False在以下代码中被评估为:

class POC(object):
  def __init__(self):
    self.__set_states = (1,2,3,4,5)
    self.__input_alph = ('a','b')
    self.__directions = ('i','d')

  def enterTransition(self):
    while True:
      print "enter transition tuple format:"
      trans = raw_input(" Example (1,'a',2,'b','d') : ")
      inSetStates = (trans[0] in self.__set_states) and (trans[2] in self.__set_states)
      inInputAlph = (trans[1]in self.__input_alph) and (trans[3] in self.__input_alph)
      isCorrectDirection = (trans[4].lower() in self.__directions) or (trans[4].lower() in self.__directions)
      if (inSetStates and inInputAlph and isCorrectDirection):
        return trans
        break
      else:
        print "ERROR: Something is wrong"

poc = POC()
poc.enterTransition()

调试器向我展示了 tuple的three值,并且:False(1, 'a', 2, 'b', 'd')

inInputAlph = False
inSetStates = False
isCorrectDirection = False
self = <__main__.POC object at 0x1860690>
trans = "(1,\'a\',2,\'b\',\'i\')"

另外,我不知道这些反斜杠是什么。

4

1 回答 1

7

trans是一个字符串,而不是一个元组。字符串也是可索引trans[1]的,字符串 '1' (位置 1 的字符)也是可索引的。

您需要先将输入转换为元组。一个简单的方法是使用ast.literal_eval()函数

 >>> import ast
 >>> ast.literal_eval("(1,\'a\',2,\'b\',\'i\')")
 (1, 'a', 2, 'b', 'i')

.literal_eval()函数将其输入解释为 python 文字,并将尝试返回与该输入匹配的 python 值。

于 2012-12-02T14:24:28.080 回答