2017-10-29 2 views
1

Ich habe ein Array, das eine Zeichenfolge für jeden Index speichert. Ich versuche, eine Benutzereingabe mit dem Array zu vergleichen, um den Index zu finden, den die Zeichenfolge befindet. Ich kann bestätigen, dass die Benutzerzeichenfolge und die Arrayzeichenfolge identisch sind, aber es gibt mir kein richtiges Ergebnis. Ich habe eine Beispielausgabe auch eingeschlossen. Aber wenn ich "noaa 16" eingebe, durchläuft es das Array, aber es fehlt der Index.Vergleichen von Strings in einem Array in Python

import ephem 
    import datetime 
    requestedSat = raw_input("Please enter the satellite you want to track") 
    requestedSat = requestedSat.upper() #format the users input to fit the file constraints. 
    tleFile = open("t") 
    i = 0 
    array = [None] * 100 #need to create a link list of sorts to account for larger files. If a file as more than 100 lines we will have an index error 
    for line in tleFile: #read thew the file, counting how many lines there are, as well as adding each line to an array index. 
     array[i] = line.translate(None,"[+-]") #removing special characters form the array. I dont know if they are important yet. 
     i+=1 

    j=0 
    found = False 

    for x in xrange(0,i/3): 
     print requestedSat 
     print "array = " + array[j] 
     if requestedSat == array[j]: 
      print "found it" 

     else: 
      j+=3 

Hier ist der Ausgang. Wie Sie sehen können, hat der Benutzer NOAA 16 eingegeben, und der Zeichenfolgenwert wird im Array gespeichert. Wie kann ich es die Saiten genau

NOOA 16 
array = NOAA 14    

NOOA 16 
array = NOAA 15 B    

NOOA 16 
array = NOAA 16    

NOOA 16 
array = NOAA 17    

Antwort

0

Wenn Sie Leseleitungen for line in tleFile: mit zum Vergleich erhalten, die jeweils line wird die abschließenden \n Zeichen am Ende enthalten. So funktioniert der Dateiobjekt-Generator. Ihre Strings sind also nicht identisch, da array[j] am Ende einen zusätzlichen Zeilenumbruch hat. Sie überprüfen, ob 'NOOA 16' == 'NOOA 16\n'False zurückgibt.

Sie können dieses Problem lösen, indem sie die im Vergleich Saiten eines führenden Abisolieren und Hinter Leerzeichen:

if requestedSat.strip() == array[j].strip(): 
+0

Ok i Array hinzugefügt [i] = line.translate (None "[+ -]") ersetzen. ('\ n', "") .replace ("", "") aber es machte keinen Unterschied :( –

+0

Warum nicht meine vorgeschlagene Lösung stattdessen versuchen? Verwenden Sie 'strip()', um sicherzustellen, dass Sie kein Leerzeichen verpassen –

+0

Ich dachte, dass der obige Code die Zeilenumbrüche am Ende entfernen würde.Ich verwendete es, wenn ich eine Zeichenfolge zum Array-Index setzte.Ich bin vielleicht ein wenig unklar? EDIT: "Ich habe nicht gesehen, dass du deine Antwort editiert hast lol" –