2017-05-03 2 views
1

Ich muss den Benutzer nach einer Eingabe fragen (welches Problem hast du?) Ich erstellte eine Datei, die die möglichen Probleme auch hat Als mögliche Lösungen für diese Probleme. Das Programm sollte die Lösung ausdrucken, wenn die Benutzereingabe das Schlüsselwort in die Datei eingibt. Hier ist der Code:Wie passe ich die Benutzereingabe mit Schlüsselwörtern in meiner Textdatei an und gebe eine Ausgabe

print ("welcome to our automated trouble shooting system") 

def do_again(): 
    datadict = {} 
    with open('prosol.txt') as file: 
     for rec in file: 
      rec = rec.split(':') 
      problem = rec[0] 
      answer = rec[1] 
      problem = problem.split(" ") 
      for item in problem: 
       datadict[item] = answer 



    user_problem = input('What is the problem?: ') 
    print(datadict[user_problem]) 


    repeat = input("do you have any other problems.\n1. Yes\n2. No\n") 
    try_again = ["1","2"] 
    while repeat not in try_again: 
     repeat = input("do you have any other problems.(please answer using the corrinsponding numbers)\n1. Yes\n2. No\n") 
    if repeat == "1": 
     (do_again()) 
    elif repeat == "2": 
     print("bye. i hope it helped you") 
     quit() 

(do_again()) 

es funktioniert, wenn ich ein Wort Schlüsselwörter verwende. zum Beispiel

welcome to our automated trouble shooting system 
What is the problem?: **screen** 
if your screen is broken, then you will have to replace it. if it is frozen the try turning off your phone and the turn it on again. 

do you have any other problems. 
1. Yes 
2. No 

aber es funktioniert nicht, wenn ich

welcome to our automated trouble shooting system 
What is the problem?: **my screen doesnt work** 
Traceback (most recent call last): 
    File "C:\Users\hp\Downloads\task2\mine\task 2.py", line 38, in <module> 
(do_again()) ##calling the function 


File "C:\Users\hp\Downloads\task2\mine\task 2.py", line 18, in do_again 
    print(datadict[user_problem]) ##print the value of the kye selected 

KeyError: 'my screen doesnt work' 

ich so das Gefühl, ein volles sentence.for Beispiel setzen geschieht, weil ich einen dictonary verwende. Obwohl ich weiß, dass dies der Rerason ist, weiß ich nicht, wie ich es beheben kann. kann jemand mir helfen pls. hier ist die Datei nur, wenn Sie es brauchen:

screen Screen SCREEN display Display DISPLAY : if your screen is broken, then you will have to replace it. if it is frozen the try turning off your phone and the turn it on again. 

battery Battery BATTERY power Power POWER : if your phone is out of charge and you cant seem to charge it then you will have to replace either your battery or charger. 

audio Audio AUDIO sound Sound SOUND : to fix you sound you can go to settings, then display. there you can change the setting of your devices sound 

ich bin auch ein Neuling in Python. also musst du mich mit deinen Erklärungen ertragen

+0

: Statt für viele verschiedene Gehäusevarianten eines einzelnen Wortes zu prüfen , verwenden Sie ['str.lower'] (https://docs.python.org/3/library/stdtypes.html#str.lower), um nur die Eingabe in Kleinbuchstaben zu vergleichen. zB: 'if input ("> ") .lower() == 'screen'' –

Antwort

0

Du rufst einen Schlüssel direkt von der Benutzereingabe ab. Sie müssen nach dem Schlüsselwort suchen, bevor Sie versuchen, den Schlüssel aufzurufen, oder Sie können eine try except-Klausel eingeben, um Ausnahmen abzufangen, wenn der Schlüssel, den sie anrufen, nicht im Wörterbuch enthalten ist.

user_answer = input("What's your problem?") 
split_answer = user_answer.split(" ") 
for option in datadict.keys(): 
    if option in split_answer: 
     print(datadict[option]) 
+0

und wie suche ich nach einem Schlüssel? –

+0

Nehmen wir an, der Benutzer gibt "Mein Computerbildschirm ist defekt" ein, wenn Sie user_input_query eingeben.Split ("") und Suche in der Split-Liste für Ihre Schlüsselwörter können Sie die Antworten auf der Grundlage ihrer Antwort aufrufen. Ich werde eine Bearbeitung in meinem Beitrag setzen, 2 Sekunden – TLOwater

+0

@MarufTalukdar siehe meine Bearbeitung – TLOwater

0

Das Problem ist, dass Ihr Wörterbuch einen Eintrag für 'screen' (oder '**screen**', ich bin nicht sicher, Beurteilung von Ihrem Code), aber nicht für jeden vollständigen Satz.

Sie müssen zuerst die Schlüsselwörter identifizieren, die auf Probleme bei der Benutzereingabe hinweisen, und dann die in Ihrem Wörterbuch gespeicherten Lösungen ausdrucken.

Hier ist eine einfache Demo, die den Punkt herüberbringen sollte.

>>> answers = {'screen': 'do A', 'water': 'do B', 'power': 'do C'} 
>>> user_input = input('what is the problem? ') 
what is the problem? my screen is damaged from a water spill 
>>> words = user_input.lower().split() 
>>> for problem in words: 
...  if problem in answers: 
...   print(answers[problem]) 
... 
do A 
do B 

(Ich gehe davon aus, dass Sie Python 3 verwenden, wenn Sie Python verwenden 2 Verwendung raw_input statt input.)

+0

ok, aber wie bekomme ich die Antwort/Lösung aus einer Textdatei? –

0

Ich vermute, dass Ihre Aufnahmedatei wie folgt aussieht: question1:answer1 question2:answer2 ... question_n:answer_n die Fehler kann hier liegen:

def do_again(): 
    datadict = {} 
    with open('prosol.txt') as file: 
     for rec in file: 
      rec = rec.split(':') 
      problem = rec[0] 
      answer = rec[1] 
      problem = problem.split(" ") 
      for item in problem: 
       datadict[item] = answer 

die problem = problem.split(" ") nur einen ganzen Satz in Worte geteilt, und die datadict speichert nur die Wörter als Schlüssel.

zum Beispiel: how old are you:16

in Ihrem Code ist die datadict wie: { 'how': 16, 'old': 16, 'are': 16, 'you': 16 } was nicht, was Sie schnelle Spitze wollen

Verwandte Themen