Ich bin nicht sicher, was ich falsch hier tun, den ganzen Tag verbrachte googeln und Python Bücher zu lesen ..Python len() Verwirrung
Ich habe die folgende Funktion:
def extract(inNo, inputFile2, outputFile):
ifile = open(inputFile2, 'r')
ofile = open(outputFile, 'w')
lines = ifile.readlines()
for line in lines:
print(str(len(line)))
if str(len(line)) == str(inNo):
ofile.write(line)
I‘ Ich versuche zu verstehen, len()
, ich bekomme seltsame Ergebnisse, wenn Sie es verwenden. Meine Eingabedatei ist die folgende:
1
22
333
4444
55555
666666
7777777
88888888
Nun, wenn ich '7' als inNo
Variable verwenden, die Ausgabe (dh print
) ich erhalte, ist:
2
3
4
5
6
7
8
8
und die Ausgabedatei wird :
666666
ich bin sicher, python.exe Längenzählwert Start von 1, dh von der Überprüfung in:
len('123')
würde ein Ergebnis von
3
Ist mein Verständnis von len()
falsch, oder bin Codierung ich es falsch?
Im Wesentlichen ist, was diese Funktion tut; es nimmt eine Eingabe, eine Ausgabe und eine Zeichenlänge als Argumente. Diese kommen von einer anderen Funktion und die 2. Funktion ruft diese mit Argumenten auf.
Diese Funktion liest Zeilen aus der Eingabedatei. Für jede Zeile erhält sie die Zeichenlänge und vergleicht sie mit der Eingabe Nr. Wenn sie gleich sind, sollte sie diese Zeile in die Ausgabedatei schreiben. Ich nehme an, da ich kein "sonst:" habe, sollte es die Iteration weiterführen. Die print() -Funktion ermöglicht es mir, genau zu sehen, was es als Länge berechnet hat.
Wenn ich versuche, '- 1' oder '+ 1' zum len() hinzuzufügen, d. H. (Len (line) + 1) verursacht es noch mehr seltsame Dinge zu passieren.
'len (123)' ist nicht 3. 'len (123)' löst einen TypeError aus, da ganze Zahlen keine Länge haben. – user2357112
Jede Zeile in Ihrer Eingabedatei endet mit einem Zeilenvorschubzeichen. Pythons readlines() -Funktion entfernt diese Zeilenenden nicht. Daher ist die Länge jeder Zeile 'charactersYouCanSee + 1', die Zeile' 666666' ist wirklich '666666 \ n' (' \ n' ist ein einzelnes Zeichen) – Bilkokuya
bedenken Sie auch, dass ein '' \ n''-Zeichen an ist jede Linie. Verwenden Sie einen Editor, der Zeilenumbrüche zeigt –