2016-08-22 3 views
-1

Ich brauche ein Python-Programm zu schreiben, um die Werte in einer Datei, eine pro Zeile, wie Datei zu lesen: test.txtpython: Wie man die Nummer in einer Datei zählt?

1 
2 
3 
4 
5 
6 
7 
8 
9 
10 

Bezeichnen wir diese als j1, j2, j3, ... jn , ich brauche die Unterschiede aufeinander folgender Werte zu summieren:

a=(j2-j1)+(j3-j2)+...+(jn-j[n-1]) 

I Beispiel-Quellcode

haben
a=0 
    for(j=2;j<=n;j++){ 
    a=a+(j-(j-1)) 
    } 
print a 

und der Ausgang ist

9 
+0

Python verwendet keine geschweiften Klammern, was ist Ihr Beispielcode? – depperm

+0

Was ist 'jn', ist es die Nummer in einer Zeile von der test.txt? – depperm

+0

Ich verstehe nichts über Ihre Frage, und es ist nicht wegen Ihres Englisch. –

Antwort

0

Wenn ich das richtig verstanden, die folgende Gleichung;

a = (j2-j1) + (j3-j2) + ... + (jn-(jn-1)) 

Wie Sie über die Datei iterieren, wird der Wert in der vorherigen Zeile aus dem Wert in der aktuellen Zeile subtrahieren und dann all diese Unterschiede hinzufügen.

a = 0 

with open("test.txt", "r") as f: 
    previous = next(f).strip() 
    for line in f: 
     line = line.strip() 
     if not line: continue 
     a = a + (int(line) - int(previous)) 
     previous = line 

print(a) 
0

Solution (Python 3)

res = 0 
with open("test.txt","r") as fp: 
    lines = list(map(int,fp.readlines())) 
    for i in range(1,len(lines)): 
     res += lines[i]-lines[i-1] 
print(res) 

Output: 9

test.text enthält:

1 
2 
3 
4 
5 
6 
7 
8 
9 
10 
0

ich nicht einmal sicher bin, ob ich die Frage, aber hier ist mein bester Versuch zur Lösung zu verstehen, was ich denke, ist Ihr Problem:

  1. Um Wert aus einer Datei verwenden „mit open()“ in Lese zu lesen Modus ('r'):

    with open('test.txt', 'r') as f: -your code here-

  2. "als f" bedeutet, dass "f" wird nun die Dateien darstellen, wenn Sie es irgendwo in diesem Block verwenden

  3. Also, alles zu lesen, die Linien und speichern Sie sie in einer Liste, tun Sie dies:

    all_lines = f.readlines()

Sie können nun, was Sie mit den Daten wollen tun.

  1. Wenn Sie sich die Funktion ansehen, die Sie zu lösen versuchen, a = (j2-j1) + (j3-j2) + ... + (jn- (jn- 1)), werden Sie feststellen, dass viele der Werte aufgehoben werden, z (j2-j1) + (j3-j2) = j3-j1. Somit läuft die gesamte Funktion auf jn-j1 hinaus, also brauchen Sie nur die erste und die letzte Nummer.

Edit: Das sagte, bitte versuchen Sie und suchen Sie dieses Forum zuerst, bevor Sie Fragen stellen. Als jemand, der schon einmal in deinen Schuhen war, habe ich beschlossen, dir zu helfen, aber du solltest lernen, auf die Fragen anderer Leute zu verweisen, die mit deinen eigenen identisch sind.

+0

Entschuldigung. mein Fehler. der Ausgang ist 10. nicht 2 – newbie

+0

Die Ausgabe sollte tatsächlich 9 basierend auf Ihrer Funktion sein. – Niko

0

Die richtige Antwort lautet 9:

with open("data.txt") as f: 
    # set prev to first number in the file 
    prev = int(next(f)) 
    sm = 0 
    # iterate over the remaining numbers 
    for j in f: 
     j = int(j) 
     sm += j - prev 
     # update prev 
     prev = j 
    print(sm) 

Oder mit itertools.tee und zip:

from itertools import tee 
with open("data.txt") as f: 
    a,b = tee(f) 
    next(b) 
    print(sum(int(j) - int(i) for i,j in zip(a, b))) 
Verwandte Themen