2016-07-19 11 views
0

Ich versuche, eine Funktion zu machen, die bei Eingabe durch den Benutzer Eingabe einer Liste von Zeichenfolgen in einer Textdatei zuordnen und eine ganze Zahl entsprechend der Zeichenfolge in der Datei zurückgeben kann . Im Wesentlichen überprüfe ich, ob die Benutzereingabe in der Datei ist, und gebe den Index der übereinstimmenden Zeichenfolge in der Datei zurück. Ich habe eine funktionierende Funktion, aber sie scheint langsam und fehleranfällig zu sein.Mapping Benutzereingabe in Text Dateiliste

def parseInput(input): 
    Gates = [] 
    try: 
     textfile = open("words.txt") 
     while nextLine: 
      nextLine = textfile.readline() 
      Gates[n] = nextLine #increment n somewhere 
    finally: 
     textfile.close() 
    while n <= len(Gates): 
     nextString = Gates[n] 
     if input in nextString: 
      #Exit loop 
    with open("wordsToInts.txt") as textfile: 
     #Same procedure as the try loop(why isn't that one a with loop?) 
     if(correct): 
      return number 

Das scheint eher ... schlecht. Ich kann mir einfach keinen besseren Weg vorstellen, dies zu tun. Ich habe die volle Kontrolle über words.txt und wordsToInts.txt (sollte ich diese kombinieren?), Damit ich sie nach Belieben formatieren kann. Ich suche nach Vorschlägen für die Funktion selbst, aber wenn eine Änderung der Textdateien helfen würde, würde ich gerne wissen. Mein Ziel ist es, die Fehlerursache zu reduzieren, aber ich werde später eine Fehlerüberprüfung hinzufügen. Bitte schlagen Sie eine bessere Möglichkeit vor, diese Funktion zu schreiben. Wenn Sie Code schreiben, verwenden Sie bitte Python. Pseudocode ist jedoch in Ordnung.

Antwort

0

Ich würde sagen, die Dateien zu kombinieren. Sie können Ihre Worte, und ihre entsprechenden Werte haben wie folgt:

words.txt

string1|something here 
string2|something here 

Dann Sie jede Zeile als ein Eintrag in einem Wörterbuch speichern und rufen Sie den Wert auf der Grundlage Ihrer Eingabe:

def parse_input(input): 
    word_dict = {} 
    with open('words.txt') as f: 
     for line in f.readlines(): 
      line_key, line_value = line.split('|', 1) 
      word_dict[line_key] = line_value.rstrip('\n') 
    try: 
     return word_dict[input] 
    except KeyError: 
     return None 
0

ich versuche, eine Funktion, die, da Eingaben vom Benutzer zu machen, Eingabe in eine Liste von Zeichenketten in einer Textdatei zuordnen können, und kehren einige integer entspr auf die Zeichenfolge in der Datei. Im Wesentlichen überprüfen, ich ob das, was die Benutzereingabe in der Datei und den Index des passenden String zurückgeben, die in der Datei

def get_line_number(input): 
    """Finds the number of the first line in which `input` occurs. 

    If input isn't found, returns -1. 
    """ 
    with open('words.txt') as f: 
     for i, line in enumerate(f): 
      if input in line: 
       return i 
    return -1 

Diese Funktion wird die Spezifikation von Ihrer Beschreibung mit der zusätzlichen Annahme treffen, dass die Zeichenfolge, die Sie sich darum kümmern, sind in getrennten Zeilen. Bemerkenswerte Dinge:

  1. Dateiobjekte in Python fungieren als Iteratoren über die Zeilen ihres Inhalts. Sie müssen die Zeilen nicht in eine Liste einlesen, wenn Sie nur die einzelnen Zeilen prüfen müssen.

  2. enumerate Die Funktion nimmt einen Iterator und gibt einen Generator, der ein Tupel wie (index, element) ergibt, wobei element ist ein Element in der Iterator und Index seine Position innerhalb des Iterator ist.

  3. Der Begriff Iterator bedeutet jedes Objekt, auf das Sie in einer for-Schleife zugreifen können.
  4. Der Begriff Generator bedeutet ein Objekt, das Elemente generiert, um "on-the-fly" zu iterieren. Das bedeutet in diesem Fall, dass Sie nacheinander auf jede Zeile einer Datei zugreifen können, ohne die gesamte Datei in den Speicher Ihres Computers laden zu müssen.
  5. Diese Funktion ist im Standard-Pythonic-Stil geschrieben, mit einem Docstring, einem passenden Gehäuse für Variablennamen und einem beschreibenden Namen.