2016-11-06 3 views
0

私が作成している方法については、行の最後にある単語を取りたいと思います。その行の先頭(スペース文字まで)を配列に置き換えます。ここでPython - 与えられた入力と同じ行にある単語を見つける

は、これまでの私のコードです:

def ruleElements(factor): 
    # Creates list of RHS and LHS rule elements 
    results = [] 

    # If RHS factor is found in grammar, append corresponding LHS. 
    for line in grammarFile: 
     start = line.find(0) 
     end = line.find(' ', start) 
     if factor in line: 
      results.append(line[start:end]) 

    return results 

は、これまでのところ、出力された配列が空のすべての時間をアップしています。私の論理がどこで間違っているのか分かりません。 grammarFileで

ラインは、例えば、次のようになります。

VP - > V NP

NP - > N

VP - > V PP

私が撮りたいですプログラムの他の部分で使用される配列に左辺を追加します。

答えて

0

アイデア...

あなたがで行を分割することができます「 - >」区切り文字とスペースをトリム:

line_items = [x.strip() for x in line.split('->')] 

# Splits 'VP -> V PP' into ['VP', 'V PP'] 

次に、あなたが第二に、あなたの入力factorを調べることができますこの配列の最初の項目を次のように返します。

for line in grammarFile: 
    line_items = [x.strip() for x in line.split('->')] 
    if factor == line_items[1]: 
     return line_items[0:1] 

私はそうではありませんどのようなgrammarFileが正確に(バイトですか?文字列?)が、このようなものは動作する可能性があります。

こちらがお役に立てば幸いです。

+0

ありがとうございます。これは私が必要とするものです。 –

0

行をスペースで分割します。これにより、表示される順序で単語の一覧が表示されます。 list [-1]は最後の単語、list [-2]は左の単語です。

myStr = 'My dog has fleas' 
words = myStr.split(' ') 
print(words[-1], words[-2]) 

fleas 
dog 
+0

あなたが好きなわけ:line.splitため を(」「)grammarFileに: 要因場合==リスト[-1] results.append(リスト[-2]) –

+0

がそれかどうかを確認するために私の編集をチェック助けてください。 – zenlc2000

+0

ありがとうございます。これは便利ですが、結果が一貫して私の質問に必要なものを得ることはないと思いますが、私はこれを念頭に置いています。 –

関連する問題