2016-12-07 4 views
0

現在のコードはタプルのリストを検索し、入力された文字列と一致するエントリを出力します。文字列が見つからない場合は、エラーを出力します。しかし、私のコードは、見つかった結果を印刷した後でさえエラーを出力します。それはforループのすべてのエントリを検索しますので、Pythonは次のElif文に進む

  if scheme not in i: 
        print("Could not find a record with degree scheme",scheme) 

は、どのように私はこれを変更するだろうし、何も検出されない場合はエラーを示しています。現在、見つかったエントリが表示されているため、「見つかりませんでした..」というエラーも表示されるためです。あなたはlstでタプルを循環するiを使用するよう

+0

ラップelse文で、あなたのコードのいずれかのforループやif文の後の後の第二の部分に使用することができます試してみてください。 –

+0

私はそれを技術的にelifの声明にすることができますか?最初のIf文または2番目のif文を意味しますか? –

答えて

1

あなたはフラグ

if choice == 1: 
     found_flag = False 
     scheme=input("Enter the degree scheme: ").upper() 
     for i in lst: 
      if i[2] == scheme: 
       printStud(i[0:5]) 
       found_flag = True 

     if not found_flag: 
       print("Could not find a record with degree scheme",scheme) 
+0

'found flag'がTrueに設定されていて、見つかったフラグを現在のもの以外の/ if文内で使用すると、見つかったフラグの値が再びfalseにリセットされるか、 ? –

+1

おそらく、外側の 'if'の中にフラグを持っていくほうがスコープ側で意味があります。 – Iluvatar

+0

@godlypythonでは、値をFalseにリセットする必要があります。 Pythonの可変スコープ規則については、http://stackoverflow.com/questions/291978/short-description-of-scoping-rulesを参照してください。 – yuval

0

schemeは、iになることはありません、そのようにそれがlstから単一のタプルです。

if scheme not in [s[2] for s in lst]: 
+0

それは本当に彼の問題ではありません。そして、 '私は** forループのローカルではありません**です。 –

+0

これは厳密にはローカルではありませんが、この場合はループのコンテキストでのみ役に立ちます。 – Iluvatar

+0

ええ、あなたはそれが正しいとは言えませんでしたが、今はっきりしていると編集されました。 – Iluvatar