2016-04-22 214 views
0

我想在輸入中搜索關鍵字,我已經問了用戶,如果關鍵字在輸入中我想我的代碼打開特定的文本文件(我使用蛋糕作爲例子。但如果沒有找到任何關鍵字,我希望它再次提出問題。嵌套和打破循環

但是我在結束循環時遇到了問題,因爲它一直在問這個問題。我儘量保持我的代碼儘量少,但我總是可以如果報應發佈更多。

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() 

那麼我想這再次n量的時間,因爲它只有一個循環工作,任何幫助將是appre ciated。

+0

我不確定這個示例代碼如你所願。 'f.read = f.read()'這行基本上沒有任何作用。它將'f'實例的'read()'方法重新分配給'read()'。基本上,你正在做'x = x'。我相信你的意思是把'f.read()'調用的結果存儲到一個變量中,以便在後面的for循環中打印,但即使這樣循環也很混亂,因爲你只需要調用print什麼是對文件句柄實例的'read'方法的引用。另外,在嵌套迭代器中重用'i'值通常是不好的做法。 – Sam

+0

謝謝你的幫助,所以你有什麼建議應該看起來像什麼? –

+0

舉例來說,如果查詢中的單詞爲: 並且打開('Victoria.txt','r')爲f: print(f.read()),那麼我會將它寫成更像'for word in keywords1: 因爲''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

你需要調用的問題只有一次

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

當然你也可以在第一個循環這個代碼集成

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()