Zwischenausgabe durch Konsole, ohne das Pogramm zu beenden

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Kirarara
User
Beiträge: 3
Registriert: Donnerstag 20. Juli 2017, 12:51

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
Melewo
User
Beiträge: 320
Registriert: Mittwoch 3. Mai 2017, 16:30

Nicht das ich Deine Frage richtig verstanden hätte, doch Du könntest zum Beispiel ein Countdown-Script schreiben, welches nach dem Countdown etwas ausgibt und danach einen neuen Countdown startet.
Kirarara
User
Beiträge: 3
Registriert: Donnerstag 20. Juli 2017, 12:51

Danke, das hört sich gut an, das versuche ich mal
BlackJack

@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‽
Kirarara
User
Beiträge: 3
Registriert: Donnerstag 20. Juli 2017, 12:51

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.
skirnir
User
Beiträge: 33
Registriert: Sonntag 25. Januar 2015, 10:59

Was spricht denn gegen ein

Code: Alles auswählen

print(ergebnis)
am Ende der Schleife?
Zizibee
User
Beiträge: 229
Registriert: Donnerstag 12. April 2007, 08:36

@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):

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))
Benutzeravatar
DeaD_EyE
User
Beiträge: 1017
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.

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)
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?
Zuletzt geändert von Anonymous am Donnerstag 20. Juli 2017, 17:17, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Codebox-Tags gesetzt.
sourceserver.info - sourceserver.info/wiki/ - ausgestorbener Support für HL2-Server
Antworten