2017-02-12 5 views
0

Я недавно нашел этот код, но изо всех сил пытался разобраться, как он работает. «111.txt» - это текстовый файл с строками списков, где первая часть списка на каждой строке является решением, а соответствующие слова в этом списке являются ключевыми словами, связанными с этим решением. Я понимаю большую часть его, кроме строки 8 (solutions[i[-1]] ...). Я искал разные модули, но я до сих пор не понимаю, что делает эта строка и как она работает. Я довольно новичок в использовании Python, поэтому я по-настоящему ценю простое объяснение этой строки, если это возможно.Извлечение первого слова в текстовый файл, а затем соответствующие слова?

Заранее благодарен!

questionbank = [] 
with open ('111.txt') as questions: 
    for line in questions: 
     questionbank.append(line.strip().split(',')) 

solutions = {} 
for i in questionbank: 
    solutions[i[-1]] = i[0:len(i)-1] 

def phone_problem(): 
    n = 2 
    while n <3: 
     problem = input("Phone problem?") 
     for d,v in solutions.items(): 
      if any(word in problem for word in v): 
       print(d) 
       n = 4 
      else: 
       continue 

phone_problem() 

Пример "112.txt":

put your phone is rice, wet, damp, water, puddle 
replace you screen, screen, crack, smash, shatter... 

UPDATE: Я добавил в свой код, но он по-прежнему does't выход раствора. Он просто продолжает запускать цикл while независимо от того, что я печатаю как проблему. Я действительно не знаю, почему, но это может быть связано с тем, когда вы определили решение.

import webbrowser,time 
url = "https://www.google.co.uk/webhp?hl=en&sa=X&ved=0ahUKEwjNuLiL1vHRAhVjD8AKHdFEAiEQPAgD&gws_rd=cr&ei=zUiTWKKpF8P_UoSambgO#hl=en&q=" 
problem = input("What is the problem with you device?") 
split = problem.split(" ") 
keyList = [] 

def other(): 
     print("no solution") 

questionbank = [] 


with open ('111.txt') as questions: 
    for line in questions: 
     questionbank.append(line.strip().split(',')) 
# the following line are probably the source of the problem(up to calling the phone_problem function) 
solutions = {question[0]:question[1:] for question in questionbank} 


def phone_problem(): 
    while True: 
     for solution, key_words in solutions.items(): 
      if any(word in problem for word in key_words): 
       print(solution) 
       return 

phone_problem() 
if keyList == []: 
    with open("counter.txt", "r") as file: 
     for lines in file: 
       number = lines[0] 
    file.close() 
    text_file = open("help.txt", "w") 
    text_file.write(str(int(number)+1)) 
    text_file.write("\n{}      {}        {}         {}       {}".format(number,devType,brand,device,problem)) 
    text_file.close() 
    other() 
keyList = list(set(keyList)) 
for i in keyList: 
    print("Solution:",i) 
+3

Пожалуйста, добавьте образец ввода от 111.txt – ppasler

ответ

1

Ответ в комментариях ниже ...

solutions = {} 
for i in questionbank: 
    # i = ['put your phone is rice', 'wet', 'damp', 'water', 'puddle'] 
    # i[-1] means last thing in list = 'puddle' 
    # i[0:len(i)-1] means everything in i except the last element 
    #    which could be rewritten as i[:-1] 
    solutions[i[-1]] = i[0:len(i)-1] 
    # solutions['puddle'] = ['put your phone is rice', 'wet', 'damp', 'water'] 

Я думаю, что код ошибки. Разве ключ решения не должен быть первым элементом линии? Код лучше писать следующим образом.

solutions = {question[0]:question[1:] for question in questionbank} 

def phone_problem(): 
    while True: 
     problem = input("Phone problem?") 
     for solution, key_words in solutions.items(): 
      if any(word in problem for word in key_words): 
       print(solution) 
       return 
+0

Большое вам спасибо, это действительно помогает мне !!! – Joel

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

  • Нет связанных вопросов^_^