2016-04-23 3 views
0

Я делаю программу устранения неполадок, которая будет запрашивать у пользователя ввод, поиск по некоторым спискам, чтобы найти проблему и дать им решение.Избегайте печати идентичного вывода

f=open('problem.txt') 
lines=f.readlines() 

problem1 = ["cracked", "phone", "screen", "dropped"] 
problem2 = ["charging", "port", "phone"] 
problem3 = ["slow", "phone", "freeze"] 

problem_input = input ("What is your problem? ") 
list_split = (problem_input.split()) 

for i in problem1: 
    if i in list_split: 
     print (lines[0]) 


for i in problem2: 
    if i in list_split: 
     print (lines[1])  

Но если я вход, "my phone is cracked", выход будет напечатана дважды. Как это сделать только один раз?

+1

Он печатает дважды, так как она совпадает как с первым контуром и вторым контуром. Вы можете реализовать логику состояния AND или используя break –

ответ

1

Вы едете на велосипеде по списку проблемных случаев, и ваш ввод совпадает дважды. Спичками являются "phone" и "cracked". Чтобы предотвратить это, остановка в первом матче, как, что:

for i in problem1: 
    if i in list_split: 
     print (lines[0]) 
     break 

break ключевое слово будет выйти из цикла.

0

Вы перебираете свои списки проблем и получаете несколько совпадений для своего состояния.

Вы можете return вашу согласованную проблему, сделав это в функцию:

f=open('problem.txt') 
lines=f.readlines() 

problem1 = ["cracked", "screen", "dropped"] 
problem2 = ["charging", "port"] 
problem3 = ["slow", "freeze"] 
problems = [problem1, problem2, problem3] 

def troubleshoot(): 
    problem_input = input("What is your problem? ") 
    list_split = (problem_input.split()) 
    for idx, problem in enumerate(problems, 1): 
     if any(i in problem for i in list_split): 
      return "problem{}".format(idx) 
      # or return lines[0] 

Она будет работать в следующем:

>>> troubleshoot() 
What is your problem? my phone is slow and freezing up 
'problem3' 
>>> troubleshoot() 
What is your problem? my phone is not charging 
'problem2' 
>>> 
>>> troubleshoot() 
What is your problem? my phone dropped and the screen is cracked 
'problem1' 

В качестве альтернативы, если есть не причина для "phone" в каждом из списков problem вам может быть полезно использовать dict здесь:

problems = {'cracked':1, 'screen':1, 'dropped':1, 
      'charging':2, 'port':2, 
      'slow':3, 'freeze':3} 

user_problems = {problems[i] for i in problem_input.split()} 

Примечание: я удалил "phone" от обоего из них, потому что он соответствует для каждого списка

Смежные вопросы