2016-06-26 11 views
1

Dies ist die vereinfachte Version meines Problems.Warum geben identische Strings false mit == zurück?

QA = open('Qestions and answers.txt') 
Q = [] 
A = [] 

for line in QA: 
    (first,second) = line.split(';') 
    Q.append(first) 
    A.append(second) 

QA.close() 

print(A[0], A[1]) 
print(A[0] == '1981') 
print(A[1] == 'Feb') 
print(str(A[0]) == '1981') # I even tried str 
print(str(A[1]) == "Feb") 

Ausgang:

1981 
Feb 

False 
False 
False 
False 
+3

Es gibt wahrscheinlich einige Leerzeichen drin (oder andere Zeichen, die Sie nicht so leicht feststellen können, wenn Sie die Saiten drucken). –

+2

Die Antwort ist * "sie nicht" *. Ihre Saiten sind ungleich, versuchen Sie z.B. 'print (repr (A [0]), repr ('1981'), um dies deutlich zu sehen. – jonrsharpe

+0

Sehen Sie, wie sich die Ausgabe von' print (A [0], A [1]) 'über drei Zeilen erstreckt? da sind zwei '\ n' drin! –

Antwort

4

Sie haben dort zusätzliche Leerzeichen bekam. Meine Vermutung ist dies:

print(repr(A[0])) 

Ausgang:

'1981\n' 

Dies liegt daran, wenn Sie Zeilen aus einer Datei lesen, werden Sie die Zeilenumbrüche am Ende jeder Zeile auch erhalten. Wenn Sie das nicht wollen, streichen Sie sie aus.

for line in QA: 
    line = line.rstrip('\n') 
    ... 
+1

Oder nur 'line.strip()', es scheint unwahrscheinlich, dass irgendein Leerzeichen an jedem Ende nützlich ist. – jonrsharpe

+0

Der Leerraum wird durch das Komma in "print (A [0], A [1])" verursacht. Es gibt tatsächlich keine Leerzeichen in 'A [1]' –

+0

@ MoonCheesez Woher weißt du, dass es keine abschließenden Leerzeichen oder Tabulatoren gibt? Bist du am Computer des OP und hast Zugriff auf ihre Eingabedatei? Es sieht so aus, als gäbe es für beide eine abschließende neue Zeile Worte, für was es wert ist. – SethMMorton

0

Streifen() funktioniert für dieses Problem

print(A[0].strip() == '1981') 
print(A[1].strip() == 'Feb') 


True 
True 
Verwandte Themen