2016-11-30 8 views
-1

Es gibt einen Teil meines Programms, wo ich eine sortierte Liste von Namen aus einer Textdatei an eine Funktion übergeben möchte, die den Benutzer auffordert, einen Namen einzugeben und dann anzugeben, ob der eingegebene Name in der Liste gefunden wird oder nicht. Wenn der Name gefunden wird, wird seine Position (d. H. Index) ebenfalls gedruckt.Python 3: Textdatei mit Benutzereingabe suchen?

Die Datei ist nur 30 Namen, aber wenn die zweite Funktion ausgeführt wird, wird dies angezeigt, nachdem ich den Namen eingegeben habe, nach dem ich suchen möchte:
Name nicht gefunden.
Name nicht gefunden.
Name gefunden
Name nicht gefunden.
Name nicht gefunden.
... usw. für alle 30 Namen.

Hier ist der Code:

def main(): 
    infile = open('names.txt', 'r') 
    line = infile.readline() 

    while line !='': 
     line = line.rstrip('\n') 
     print(line) 
     line = infile.readline() 

    print('\nHere are the names sorted:\n') 

    infile = open("names.txt", 'r') 
    names = infile.readlines() 
    names.sort() 

    for line in names: 
     line = line.rstrip('\n') 
     print(line) 
     line = infile.readline() 
     search_file(line) # I don't this this is the correct way to 
          # pass the sorted list of names? 


def search_file(line): 
    search = open('names.txt', 'r') 
    user_search = input('\nSearch for a name(Last, First): ') 
    #item_index = line.index(search) 
    print() 

    with open('names.txt', 'r') as f: 
     for line in f: 
      if user_search in line: 
       print('name found')#, item_index) 
      else: 
       print('name not found.') 

aktualisierte Code hier: diesmal wollen Sie würden zunächst „nicht gefunden“ zeigt immer

def search_file(line): 

user_search = input('\nSearch for a name(Last, First): ') 
print() 

try: 
    item_index = line.index(user_search) 
    print(user_search, 'found at index', item_index) 

except ValueError: 
    print('not found.') 

Antwort

0

Nun nur die Datei, die Sie einen Benutzer sind öffnen Zeit. Sie könnten alle Zeilen in der Datei in eine Liste mit .readlines() laden. Diese Funktion gibt für jede Zeile eine Zeichenfolge in einer Liste zurück. Dann können Sie mit für den Benutzer Zeichenfolge suchen in jeder Zeile mit

for l in lines: 
    if (l.find(userstring)>-1): 
     foundvar=True 
+0

Ich habe versucht, mit „Try/außer Valueerror“, aber jetzt wird es nur drucken, die Valueerror oder „nicht gefunden“ print-Anweisung –

+0

@ dreiundzwanzig Would müssen den neuen und aktualisierten Code sehen. –

+0

Ich habe das aktualisierte Stück dem ursprünglichen Beitrag hinzugefügt. Verzeihen Sie, ich bin neu in der Programmierung. –