Hi Leute,
Ich schreibe ein Programm, dass eine große Schleife enthält.
Ich fände es super, wenn nach Beendigung einer Schleife eine Ausgabe in der Konsole kommt, das Programm weiter läuft und dann wenn die Schleife wieder beendet ist, soll wieder eine Konsolenausgabe erfolgen usw.
Die möchte ich, weil diese Große Schleife ins unendlich geht und mein Prof keine wirkliche Einschränkung will, aber ich bekomme ja ohne Einschränkung keine Ausgabe,
Vielleicht hat jemand von euch eine Idee und ich hoffe ich habe mein Problem ausreichend beschrieben,
mit freundlichen Grüßen
Kira
Zwischenausgabe durch Konsole, ohne das Pogramm zu beenden
@Kirarara: Ich verstehe das Problem nicht so wirklich. Wenn Du möchtest das nach dem abarbeiten einer Schleife etwas ausgegeben wird, dann schreib doch nach der Schleife einfach Code der etwas ausgibt‽
ja das macht es ja auch, aber es gibt nicht nach jedem schleifen durchgang eine ausgabe, sondern wenn die schleife komplett durchgelaufen ist,
zb könnte man sagen ich habe eine schleife für p von 1 bis 10
ich möchte, dass wenn das programm für p=1 durchgelaufen ist den wert schon sehen wärend das programm für p=2 weiter durchgeht dann öchte ich das ergebnis sehen wären das für p=3 weiter läuft usw.
ich möchte also nicht erst das ergebnis, wenn das p durh alle werte durch ist.
zb könnte man sagen ich habe eine schleife für p von 1 bis 10
ich möchte, dass wenn das programm für p=1 durchgelaufen ist den wert schon sehen wärend das programm für p=2 weiter durchgeht dann öchte ich das ergebnis sehen wären das für p=3 weiter läuft usw.
ich möchte also nicht erst das ergebnis, wenn das p durh alle werte durch ist.
Was spricht denn gegen ein am Ende der Schleife?
Code: Alles auswählen
print(ergebnis)
@Kirarara:
Ich denke du musst uns echt noch mal erklären, warum ein einfaches print(p) nicht das macht, was du willst.
Also warum so etwas es nicht macht was du willst (ungetestet):
Ich denke du musst uns echt noch mal erklären, warum ein einfaches print(p) nicht das macht, was du willst.
Also warum so etwas es nicht macht was du willst (ungetestet):
Code: Alles auswählen
liste = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
p = 0
for element in liste:
p += element
print('p am Schleifenende: {}'.format(p))
print('Endergebnis von p: {}'.format(p))
- DeaD_EyE
- User
- Beiträge: 1206
- Registriert: Sonntag 19. September 2010, 13:45
- Wohnort: Hagen
- Kontaktdaten:
Wie sieht die verschachtelte Schleife denn aus?
Meine erste Idee: Schleife in einer Funktion auslagern und pro Durchlauf das Ergebnis ausgeben.
In einer Schleife kannst du dann über den Generator iterieren und z.B. nach jedem 100. Aufruf irgendeinen Text ausgeben.
Falls ich jetzt gerade keinen Knoten im Kopf habe, müsste er richtig zählen. Nagelt mich nicht drauf fest.
Kann natürlich sein, dass du etwas ganz anderes noch machst und ggf. Daten hin und her schieben musst.
Ohne Beispiel ist das schwierig.
Auf jeden Fall kannst du mit der Funktion enumerate() arbeiten, um die Anzahl der Durchläufe zu erfassen.
Effizient ist diese Funktion auch noch. D.h. wenn du 1e6 Iterationen hast, wirst du dadurch keine großen Nachteile haben.
Anders sieht es aus, wenn du anfängst das selbst zu implementieren.
EDIT: Hab ich irgendwelche Code-Tags falsch gesetzt oder wieso gibt es bei meinem Beitrag kein Syntax Highlighting?
Meine erste Idee: Schleife in einer Funktion auslagern und pro Durchlauf das Ergebnis ausgeben.
In einer Schleife kannst du dann über den Generator iterieren und z.B. nach jedem 100. Aufruf irgendeinen Text ausgeben.
Falls ich jetzt gerade keinen Knoten im Kopf habe, müsste er richtig zählen. Nagelt mich nicht drauf fest.
Code: Alles auswählen
def verarbeitung(datensatz):
# code zur Verarbeitung
daten = datensatz.upper()
# verarbeitete Daten ausgeben
return daten
def generator(eingabedatei):
# liest ausschließlich die Daten
with open(eingabedatei) as fd:
for zeile in fd:
# Verarbeitung findet hier statt
yield verarbeitung(zeile)
def main(eingabedateien):
# kümmert sich nur um die Ausgabe
for eingabedatei in eingabedateien:
for n, datenausgabe in enumerate(generator(eingabedatei)): # enumerate fängt bei 0 an zu zählen, kann mit start geändert werden
if n % 100 == 0: # n / 100 -> rest == 0
# bei dem 1. und jedem 100. Aufruf irgendwas ausgeben
print('Durchlauf:', n+1, datenausgabe)
# irgendwas mit den verarbeiteten Daten machen, z.B. abspeichern
# nächste Datei
print('----\nDruchlauf von {} beendet\n----'.format(eingabedatei))
if __name__ == '__main__':
dateien = ['/var/log/auth.log', '/var/log/auth.log.1']
main(dateien)
Ohne Beispiel ist das schwierig.
Auf jeden Fall kannst du mit der Funktion enumerate() arbeiten, um die Anzahl der Durchläufe zu erfassen.
Effizient ist diese Funktion auch noch. D.h. wenn du 1e6 Iterationen hast, wirst du dadurch keine großen Nachteile haben.
Anders sieht es aus, wenn du anfängst das selbst zu implementieren.
EDIT: Hab ich irgendwelche Code-Tags falsch gesetzt oder wieso gibt es bei meinem Beitrag kein Syntax Highlighting?
Zuletzt geändert von Anonymous am Donnerstag 20. Juli 2017, 17:17, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Codebox-Tags gesetzt.
Grund: Quelltext in Python-Codebox-Tags gesetzt.
sourceserver.info - sourceserver.info/wiki/ - ausgestorbener Support für HL2-Server