2016-04-22 8 views
0

私はユーザーに質問した入力のキーワードを検索したいのですが、そのキーワードが入力に含まれている場合、特定のテキストファイルを開くようにしたい(私は例としてケーキを使用しています。ループのネストとブレーク

しかし、私は質問を続けながらループを終了するのに苦労しています。私は自分のコードを最小限に保つように努めましたが、私はいつでも報いた場合、それが唯一のループで動作するように私はそれから倍のn量のために、再びこれにしたい。

keywords1 = ['jam', 'victoria', 'sponge', 'recipe', 'ingredients'] 
keywords2 = ['chocolate', 'cake'] 
keywords3 = ['tiramisu'] 

def test1(): 
    global keywords1, keywords2, keywords3, query 

    for i in keywords1: 
     if i in query: 
      f=open('Victoria.txt','r') 
      f.read = f.read() 
      for i in range(0,1): 
       print(f.read) 
      f.close() 

    for i in keywords1: 
     if i not in query: 
      question1() 
     break 

def question1(): 
    global query 
    query = input("\nWhat ingredients do you want?\nmake sure to include the keywords\n") 
    test1() 

if __name__ == "__main__": 
    question1() 

をより多くのを投稿し、任意のヘルプはappreだろうciated。

+0

私はこのサンプルコードがあなたの意図通りに機能するかどうかはわかりません。 'f.read = f.read()'の行は本質的に何もしません。 'f'インスタンスの' read() 'メソッドを' read() 'に再割り当てします。基本的に、あなたは 'x = x'をやっています。私はあなたが 'f.read()'呼び出しの結果を次の 'for'ループで出力する変数に格納することを意味すると信じていますが、' print'を一度呼び出すだけでループが混乱しますファイルハンドルインスタンスの 'read'メソッドへの参照とは何でしょうか。また、ネストされたイテレータで 'i'値を再利用することは、一般的に悪い習慣です。 – Sam

+0

援助ありがとうございますので、どのようなものになるべきかをお聞かせください。 –

+0

たとえば、キーワード1の単語の場合はと入力してください: open( 'Victoria.txt'、 'r')をf: としたprint(f.read()) 'with'文があなたのためにいくつかの基本的なファイルを開く処理を行います。これはPythonのより多くのエクスポーズで学ぶようなものですが、あなたのアプローチは「間違っていません」。 – Sam

答えて

0

私は右のあなたの質問を理解している場合、あなたはこのような何かしたい:

if __name__ == "__main__": 
    n = 5 
    for _ in range(0, n+1): # Loop is called n times 
     question1() 

それとも、このコードの一部を意味しています:

for i in keywords1: 
    if i in query: 
     f=open('Victoria.txt','r') 
     f.read = f.read() 
     for i in range(0,1): 
      print(f.read) 
     f.close() 

for i in keywords1: 
    if i not in query: 
     question1() 
    break 

それのように行うことができます。

for i in keywords1: 
    if i in query: 
     f=open('Victoria.txt','r') 
     f.read = f.read() 
     for i in range(0,1): 
      print(f.read) 
     f.close() 
    else: 
     question1() 
    break 

これは役に立ちます。あなたが唯一のあなたはあなたがキーワードの何も見つからなかった場合にのみ、質問をするべきであると書いた最初のループ

+0

これは、コードを短くするのに非常に役立ちますが、あなたが示唆したようなコードを追加すると、質問に尋ねられます。また、コードの次のビットでキーワードを認識しません。 –

0

クエリに存在しない各キーワードを尋ねてください。私はあなたが次のようなものが必要だと思っています:

def test1(): 
    if any(keyword in query for keyword in keywords1): 
     with open('Victoria.txt','r') as f: 
      f_read = f.read() 
      for _ in range(0, 1): 
       print(f_read) 
    else: 
     question1() 
0

にこのコードを統合し、しかし、あなたすることができます。もちろん、

should_ask = true 
for i in keywords1: 
    if i in query: 
     should_ask = false 
if should_ask: 
    question1() 

一度質問を呼び出す必要が

関連する問題