2017-02-12 5 views
0

Ich habe kürzlich diesen Code gefunden, aber habe gekämpft, um herauszufinden, wie es funktioniert. "111.txt" ist eine Textdatei mit Zeilen von Listen, wobei der erste Teil der Liste in jeder Zeile eine Lösung ist und die entsprechenden Wörter in dieser Liste Schlüsselworte sind, die mit dieser Lösung zu tun haben. Ich verstehe das meiste davon abgesehen von Zeile 8 (solutions[i[-1]] ...). Ich habe nach den verschiedenen Modulen gesucht, aber ich verstehe immer noch nicht, was diese Linie macht und wie sie funktioniert. Ich bin ziemlich neu in der Verwendung von Python, so würde ich eine einfache Erklärung dieser Zeile, wenn möglich, wirklich schätzen.Extrahieren Sie das erste Wort in einer Textdatei und dann die entsprechenden Wörter?

Vielen Dank im Voraus!

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

Beispiel für "112.txt":

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

UPDATE: Ich habe in Ihrem Code hinzugefügt, aber es immer noch Ausgang eine Lösung does. Es läuft einfach weiter die while-Schleife, egal was ich als Problem eintippe. Ich bin mir wirklich nicht sicher warum, aber es kann damit zu tun haben, wenn Sie die Lösung definiert haben.

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

Bitte fügen Sie Beispieleingabe von 111.txt – ppasler

Antwort

1

Antwort ist in den Kommentaren unten ...

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'] 

Ich denke, dass der Code ist fehlerhaft. Sollte der Lösungsschlüssel nicht das erste Element der Linie sein? Der Code wäre besser wie folgt geschrieben.

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

vielen Dank, das hilft mir wirklich !!! – Joel

Verwandte Themen