0

私のコードがデフォルトでこのelifになっている理由がわかりません。しかし、elseステートメントに到達することはありません。最後のelifでインデックスの範囲外のエラーをスローすることさえあります。

正規表現を使用しないことは無視してください。この宿題は許可されませんでした。問題は、elseステートメントの前の最後のelifです。

if item == '':
    print ("%s\n" % item).rstrip('\n')

elif item.startswith('MOVE') and not item.startswith('MOVEI'):
    print 'Found MOVE'

elif item.startswith('MOVEI'):
    print 'Found MOVEI'

elif item.startswith('BGT'):
    print 'Found BGT'

# ...

elif item.find(':') and item[(item.find(':') -1)].isalpha():
    print 'Mya have found a label'

else:
    # Never get to this branch
    print 'Not sure what I found'
4

2 に答える 2

4

item.find(':')-1に " :" が見つからない場合は が返されitemます。

-1は -ish であると評価されるTrueため、これが問題の原因である可能性があります。" " が の先頭にあるif item.find(':')場合にのみ一致しません。:item

この問題を解決するには、次の行を置き換えるだけです。

elif item.find(':') and item[(item.find(':') -1)].isalpha():

この行で:

elif ':' in item and item[item.find(':') - 1].isalpha():

:" "の前の文字が英数字であるかどうかを効果的にチェックします。

于 2012-09-16T03:12:34.347 に答える
3
  • あなたのifケースは本当に奇妙です:

    print ("%s\n" % item).rstrip('\n')
    

    の場合item == ''、は(item + '\n').rstrip('\n')と等しくなります。そのコードを取り除くことができると確信しています。item''

  • ステートメントを並べ替えると、 /の問題ifを取り除くことができます。MOVEIMOVE
  • Tadeck's answerに追加すると、条件として使用する必要がありitem.find(':') > 0ます。文字列が , で始まる場合:string[0 - 1] == string[-1]これは文字列の最後の文字です。

これは、おそらく修正されたバージョンのコードです

if item == '':
    print ''
elif item.startswith('MOVEI'):
    print 'Found MOVEI'
elif item.startswith('MOVE'):
    print 'Found MOVE'
elif item.startswith('BGT'):
    print 'Found BGT'
elif item.startswith('ADD'):
    print 'Found ADD'
elif item.startswith('INC'):
    print 'Found INC'
elif item.startswith('SUB'):
    print 'Found SUB'
elif item.startswith('DEC'):
    print 'Found DEC'
elif item.startswith('MUL'):
    print 'Found MUL'
elif item.startswith('DIV'):
    print 'Found DIV'
elif item.startswith('BEQ'):
    print 'Found BEQ'
elif item.startswith('BLT'):
    print 'Found BLT'
elif item.startswith('BR'):
    print 'Found BR'
elif item.startswith('END'):
    print 'Found END'
elif item.find(':') > 0 and item[(item.find(':') - 1)].isalpha():
    print 'Mya have found a label'
else:
    print 'Not sure what I found'

これは、コードのもう少し Pythonic バージョンです。

def test_item(item):
  tests = ['MOVEI', 'MOVE', 'BGT', 'ADD', 'INC', 'SUB', 'DEC', 'MUL', 'DIV', 'BEQ', 'BLT', 'BR', 'END']

  for test in tests:
    if item.startswith(test):
      return 'Found ' + test

  if item.find(':') > 0 and item[(item.find(':') - 1)].isalpha():
    return 'Mya have found a label'
  else:
    return 'Not sure what I found'
于 2012-09-16T03:21:00.877 に答える