Seite 1 von 1
Spaltensumme
Verfasst: Montag 3. April 2017, 10:15
von SerBlack
Hallo ich will die Summen der einzelnen Spalten herausfinden. Aber ich komme nicht weiter.
Mein Code:
Code: Alles auswählen
datei = "C:\\Users\\***\\Pythontest\\uebung.txt"
total = 0
with open( datei, 'r' ) as eingabe:
for spalte in eingabe:
inhalt = spalte.split("Enter")
for hiohio in range( 0, 3):
num = int(inhalt[hiohio])
total += num
print("Summe der Zeile: " + str(total) )
total = 0[
uebung.txt sieht so aus:
12 23 55
5 6 7
8 98 5412
Beispiel:
12+5+8 =25, Die Summe für die 1. Spalte würde 25 ergeben.
und noch eine Frage, durch was werden die Spalten getrennt?
Re: Spaltensumme
Verfasst: Montag 3. April 2017, 12:02
von Sirius3
@SerBlack: bei Dir werden die Spalten durch das Wort "Enter" getrennt, was ziemlich seltsam ist. Über Listen iteriert man direkt und nicht über einen Index. Variablen initialisiert man bevor man sie braucht und nicht, nachdem man damit fertig ist. Für Summen gibt es auch die sum-Funktion. Und wo kommst Du nicht weiter? Was für Gedanken hast Du Dir schon gemacht?
Re: Spaltensumme
Verfasst: Montag 3. April 2017, 12:15
von SerBlack
So habe es jetzt etwas verbessert:
Code: Alles auswählen
datei = "C:\\Users\\***\\Pythontest\\uebung.txt"
total = 0
with open( datei, 'r' ) as eingabe:
for spalte in eingabe:
inhalt = spalte.split("\t")
for hiohio in range( 0, 3):
num = int(inhalt[1])
num = int(inhalt[1])
num = int(inhalt[1])
total += num
print("Summe der Spalte: " + str(total) )
Re: Spaltensumme
Verfasst: Montag 3. April 2017, 12:52
von BlackJack
@SerBlack: Gute Namen sind wichtig. Das erleichtet es dem Leser nicht nur ein Programm leichter zu verstehen, sondern es hilft dem Programmierer auch zu sehen ob er das Problem richtig verstanden hat, und ob die Lösung korrekt ist. Darum ist es sehr ungünstig nichtssagende Fantasienamen oder gar *falsche* Namen zu verwenden. Was zum Henker soll `hiohio` bedeuten? Und warum nennst Du *Zeilen* `spalte`?
Was denkst Du was die Zeilen 9 bis 11 bewirken? Warum wird `hiohio` in der Schleife nicht verwendet? Dann braucht man keine Schleife, dann könnte man `num` auch einfach mit 3 multiplizieren.
Re: Spaltensumme
Verfasst: Montag 3. April 2017, 12:55
von SerBlack
Code: Alles auswählen
with open( datei, 'r' ) as eingabe:
for zeile in eingabe:
inhalt = zeile.split("\t")
print( inhalt )
for index in range( 0, len(inhalt) ):
num = int(inhalt[index])
total += num
print("Summe der Zeile: " + str(total) )
total = 0
So, verständlicher? (Hier werden aber nur die einzelnen Zeilen addiert, aber wie addiert man die Spalten?)
Re: Spaltensumme
Verfasst: Montag 3. April 2017, 14:48
von Sirius3
@SerBlack: besser so
Code: Alles auswählen
with open(datei, 'r') as eingabe:
for zeile in eingabe:
inhalt = zeile.split("\t")
print(inhalt)
total = 0
for spalte in inhalt:
num = int(spalte)
total += num
print("Summe der Zeile: {}".format(total))
Überleg Dir mal in einem ersten Schritt, wie Du die Summe über die erste Spalte berechnen könntest.
Re: Spaltensumme
Verfasst: Dienstag 4. April 2017, 08:30
von SerBlack
So, habe mir etwas überlegt:
Code: Alles auswählen
with open( datei, 'r' ) as eingabe:
for zeile in eingabe:
inhalt = zeile.split("\t")
print( inhalt )
total = 0
for index in range( 0, len(inhalt) ):
num = int(inhalt[0])
num = int(inhalt[1])
num = int(inhalt[2])
total += num
print("Summe der Zeile: " + str(total) )
Re: Spaltensumme
Verfasst: Dienstag 4. April 2017, 09:28
von Sirius3
@SerBlack: kannst Du auch schreiben, was Du Dir dabei überlegt hast? Was macht die innere for-Schleife? Wofür wird index verwendet?
Re: Spaltensumme
Verfasst: Dienstag 4. April 2017, 09:34
von SerBlack
Index ist dafür da:(früher hiohio) Er zählt wie viele Einträge es gibt (im uebung.txt Ordner, so habe ich es verstanden)
Und er greift auf die Einträge zu. (Lerne Python durch so eine Seite, also so habe ich es verstanden)
Re: Spaltensumme
Verfasst: Dienstag 4. April 2017, 09:42
von snafu
@SerBlack:
Damit wenigstens das Ergebnis stimmt, solltest du die Werte direkt aufaddieren:
Code: Alles auswählen
total = 0
for index in range( 0, len(inhalt) ):
total += int(inhalt[0])
total += int(inhalt[1])
total += int(inhalt[2])
print(total)
Dieses Vorgehen über den Index ist jedoch unüblich (zumal du hier den Index gar nicht verwendest und das auch als Schleife hier komplett sinnlos ist, ehrlich gesagt). Besser gehst du direkt über die Werte:
Code: Alles auswählen
total = 0
for wert in zeile.split('\t'):
total += int(wert)
print(total)
Und wenn man schon etwas weiter in Python ist, würde man das eher so schreiben:
Oder noch kürzer so:
Re: Spaltensumme
Verfasst: Dienstag 4. April 2017, 10:00
von snafu
Oh, man merkt dass ich noch nicht lange wache bin. Es sind ja Spaltensummen gefragt. Daher muss man den Code natürlich noch anpassen. Wahrscheinlich würde ich zunächst zeilenweise die Umwandlungen machen und dann zip() benutzen:
Code: Alles auswählen
with open(dateiname) as infile:
parsed_lines = [map(int, line.split('\t')) for line in infile]
column_sums = [sum(column) for column in zip(*parsed_lines)]
print(column_sums)
Re: Spaltensumme
Verfasst: Dienstag 4. April 2017, 12:00
von SerBlack
Oh, danke funktioniert ...
Könntest du mir eventuell erklären, wie du das gemacht hast, natürlich wenn du Zeit und Bock hast? Verstehe nämlich nichts (außer die ersten Zeilen).
Danke für die Hilfe
Dies ist ein sehr kleiner Schritt für die Menschheit, aber ein gewaltiger Sprung für SerBlack.
Re: Spaltensumme
Verfasst: Dienstag 4. April 2017, 12:15
von kbr
@snafu: Wir wissen, dass Du es kannst
Aber jetzt hat SerBlack zwei Probleme:
- er versteht noch nicht, warum sein Code nicht funktioniert
- und er versteht noch nicht, warum Dein Code funktioniert.
@SerBlack: Gehe noch einmal zu Deinem Posting von heute morgen und die Fragen von Sirius3 zurück und versuche zu erklären was Dein Programmcode tatsächlich tut. Am besten Zeile für Zeile. Bevor Dir das nicht klar ist und Du zumindest hinlänglich Schleifen und Datenstrukturen in Python verstanden hast, wird es Dir nicht gelingen nachzuvollziehen, was snafu da geschrieben hat.
Re: Spaltensumme
Verfasst: Dienstag 4. April 2017, 12:31
von SerBlack
Code: Alles auswählen
datei = "C:\\Users\\***\\Pythontest\\uebung.txt"
with open(datei, 'r') as eingabe:
for zeile in eingabe:
inhalt = zeile.split("\t")
print(inhalt)
total = 0
for spalte in inhalt:
num = int(spalte)
total += num
print("Summe der Zeile: {}".format(total))
1. Zeile: Ort, wo das Datei liegt, wird als "Datei" gekürzt.
2. Zeile: Öffnen der Datei, wird als "eingabe" gekürzt.
3. Zeile: (Hier verstehe ich nicht ganz was for bewirkt, aber ich auf der Seite stand, ich soll dies schreiben, da wurde es auch erklärt habe es aber nicht verstanden)
4. Zeile: Die Zeilen werden getrennt (Wo ein Tabulator zu finden ist) und wird als "Inhalt" gekürzt.
5. Zeile: Die getrennten Zeilen werden ausgegeben (also print)
6. Zeile: Total ist auf 0.
7. Zeile: (verstehe immer noch nicht was for bewirkt)
8. Zeile: num ist gleich Zahl(also int)
9. Zeile: (hier verstehe ich nicht warum += genommen wurde)
10. Zeile: Die Summe der Zeile wird ausgegeben.
(Sry, bin ein sehr sehr blutiger Anfänger, lerne Python seit einigen Tagen)
Re: Spaltensumme
Verfasst: Dienstag 4. April 2017, 12:45
von BlackJack
@SerBlack: Was Du „gekürzt“ nennst würde man eher als „Werte an Namen binden“ oder „zuweisen“ nennen. Ob der Wert ausgeschrieben länger oder kürzer als der Name ist, hat damit nichts zu tun. Bei ``total = 0`` ist der geschriebene Wert ja beispielsweise länger als der Name.
Wenn Du ``for`` nicht verstehst, dann solltest Du es verstehen lernen, entweder mit dem Tutorial das Du verwendest, oder falls das nicht hilft in einem anderen. Aber am besten nicht gleich mit Dateiobjekten, sondern beispielsweise mit Listen, weil man damit etwas einfacher in der interaktiven Python-Shell selber etwas experimentieren kann um es zu verstehen.
In der Python-Dokumentation gibt es zum Beispiel ein Tutorial.
Re: Spaltensumme
Verfasst: Dienstag 4. April 2017, 12:47
von Zizibee
Hallo SerBlack,
vielleicht solltest du dich erst einmal ein bisschen in die Funktion von for-Schleifen einlesen. Ich habe gute Erfahrungen mit diesem
Python 3 - Tutorial gemacht.
zu 9.)
+= bedeutet so viel wie "addiere zu dieser Zahl hinzu", also ist
das selbe wie
Da du ja die Summe bilden willst, musst du diese Zahlen aufaddieren.
Re: Spaltensumme
Verfasst: Dienstag 4. April 2017, 12:49
von SerBlack
Okay, danke
Werde mir jetzt mal Tutorial's reinziehen.
Bis irgendwann mal