2

次のコードでinSetStates変数が評価されるinInputAlphのはなぜですか?isCorrectDirectionFalse

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 に含まれていることを示してthreeFalseます(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 に答える