2016-05-12 10 views
-1

So muss ich suchen, ob ein Element in der ersten Spalte einer Liste von Listen ist, und wenn es ist, drucken Sie das Element. Ich muss dies mit Funktionen tun.Suche in der Liste der Listen und Funktionen

CD = input("Enter name of CD database: ")  

def createDatabase(CD):  #opens and creates list 
    aList = [] 
    file = open(CD) 
    for line in file: 
     line = line.rstrip().split(",") #strip \n and split at , 
     aList.append(line)  #add lines into formerly empty aList 
    for i in range(len(aList)): 
     aList[i][3] = float(aList[i][3]) #override line for price to be float 
    return aList 

aList = createDatabase(CD) 

def PrintList(aList): 
    for line in aList: 
     album = str(line[0]) 
     artist = str(line[1]) 
     genre = str(line[2]) 
     price = str(line[3]) 
     print("Album: " + album + " Artist: " + artist + " Genre: " + genre + " Price: $" + price) 
    return 


def FindByTitle(aList): 
    target = input("Enter Title to Search: ") 
    for item in aList: 
     if target in aList: 
      print(target) 
     else: 
      print ("Title not found") 
    return aList 

PrintList(FindByTitle(aList)) 

Der Ausgang Ich bin von diesem immer ist

Enter name of CD database: CD.txt 
Enter Title to Search: Sempiternal 
Title not found 
Title not found 
Title not found 
Title not found 
Album: Sempiternal Artist: Bring Me The Horizon Genre: Metalcore Price: $14.5 
Album: Badlands Artist: Halsey Genre: Indie Pop Price: $19.95 
Album: Wildlife Artist: La Dispute Genre: Post Hardcore Price: $9.6 
Album: Move Along Artist: The All American Rejects Genre: Punk Rock Price: $10.2 

und ist nicht ganz sicher, wie meine Suchfunktion zu tun oder zu beheben. Jede Hilfe wäre großartig, danke.

+0

Fügen Sie einige Beispieldaten und Eingabe (ersetzen die 'input' Ausdrücke mit Strings) auf Ihre Frage suchen Ziel in alist die stattdessen Liste verschachtelt ist durch die Schleife in Listen erzeugt suchen, damit wir den Code ausführen. –

+1

'Wenn Ziel in einer Liste:' ist nicht korrekt. 'Wenn Ziel in Artikel:' – ssm

Antwort

0

Sie können früh in Ihrer FindByTitle Funktion zurückkehren, sobald Sie eine Übereinstimmung gefunden haben. Wenn der Kontrollfluss die Schleife verlässt, können Sie sicher sein, dass die Kriterien nicht erfüllt wurden und Fehler zurückgegeben werden.

def FindByTitle(aList): 
    target = input("Enter Title to Search: ") 
    for item in aList: 
     if target in item: 
      print(target) 
      return aList # return here 
    print("Title not found") 
    return None 

Im Fall, dass Sie alle möglichen Listen zurück, eine Zählung halten, die verwendet werden können, um festzustellen, ob es mindestens ein Spiel war

+0

, die perfekt funktionierte, gibt es jedoch eine Möglichkeit, ich kann es nur die erste Reihe von Elementen zu suchen, weil bisher die richtige Ausgabe aber dann 'Titel nicht gefunden' dreimal für jeden von den anderen Zeilen der Liste – Staylor742

+0

hat eigentlich das sortiert. Eine letzte Frage, gibt es eine Möglichkeit, ich kann es nur das Ziel zu drucken? Weil es immer noch das Ziel sowie die gesamte Liste danach wieder druckt. – Staylor742

+0

Lassen Sie einfach die Druckanweisung aus, die Sie am Ende haben. – bashrc

0

In Funktion FindByTitle alist zu item in Zeile 4 , weil Sie ändern

def FindByTitle(aList): 
target = input("Enter Title to Search: ") 
for item in aList: 
    # change here 
    if target in item: 
     print(target) 
    else: 
     print ("Title not found") 
return aList 
Verwandte Themen