Seite 1 von 1
While-Schleife für eine bestimmte Zeit lang ausführen
Verfasst: Mittwoch 20. April 2016, 19:31
von ProgrammierLord
Metal Leute!
Weiß jemand von Euch evtl., wie man eine while-Schleife für eine bestimmte Anzahl an Sekunden ausführen kann? Sodass die Befehle, die sich in der Schleife befinden, für diese Anzahl an Sekunden (z.B. 30 Sekunden) ausgeführt werden, und danach die Schleife endet? Dafür bräuchte man ja eine Stoppuhr oder einen Timer... aber ich weiss leider nicht, wie man so etwas programmieren kann (auch wenn's bestimmt total einfach ist...).
Wär nett wenn Ihr mir helfen könntet!
Mit freundlichem Gruß
DieLordschaft
Re: While-Schleife für eine bestimmte Zeit lang ausführen
Verfasst: Mittwoch 20. April 2016, 19:34
von BlackJack
Das war gerade erst hier Thema:
viewtopic.php?f=1&t=38403 
Re: While-Schleife für eine bestimmte Zeit lang ausführen
Verfasst: Mittwoch 20. April 2016, 19:38
von ProgrammierLord
Das hatte ich schon gesehn, und hab das auch schon ausgemettelt... hat aber net funktioniert. Trotzdem danke! Habt Ihr vielleicht etzela noch weitere Vorschläge?
Re: While-Schleife für eine bestimmte Zeit lang ausführen
Verfasst: Mittwoch 20. April 2016, 19:43
von BlackJack
@ProgrammierLord: „Hat aber net funktioniert“ ist eine ganz schlechte Fehlerbeschreibung. Was soll man dazu denn jetzt sagen? Das funktioniert nämlich so.
Also was hast Du denn genau gemacht, und was ist daraufhin passiert? Wenn es eine Ausnahme gab, dann bitte den kompletten Traceback 1:1 zeigen.
Re: While-Schleife für eine bestimmte Zeit lang ausführen
Verfasst: Mittwoch 20. April 2016, 19:50
von ProgrammierLord
Ich werde das etzela noch mal versuchen einzumeddeln und dann sag ich Dir den Fehler! Vielleicht habe ich das auch falsch gemacht. Ich hatte etzela einen sehr stressigen Tag auf der Arbeit... selbstständig zu sein ist halt manchmal schwierig. Morgen nehme ich mir aber frei! Aber danke schonmal für Deine Hilfe... Metaler halten halt zusammen!
Re: While-Schleife für eine bestimmte Zeit lang ausführen
Verfasst: Mittwoch 20. April 2016, 20:05
von ProgrammierLord
Etzela hab ich echt Scheiße am Arsch: Jetzt macht der keine Fehlermeldung mehr. Aber funktionieren tut der Timer noch immer nicht. Die While-Schleife wird unendlich lang ausgeführt... die Zeit wird wohl komplett ignoriert. Hätten Sie eine Idee woran das liegen tun könnte?
Re: While-Schleife für eine bestimmte Zeit lang ausführen
Verfasst: Mittwoch 20. April 2016, 20:14
von BlackJack
@ProgrammierLord: Wahrscheinlich ist da ein Fehler im Programm…
Re: While-Schleife für eine bestimmte Zeit lang ausführen
Verfasst: Mittwoch 20. April 2016, 20:17
von ProgrammierLord
Re: While-Schleife für eine bestimmte Zeit lang ausführen
Verfasst: Mittwoch 20. April 2016, 20:50
von Üpsilon
Meddl, zeig doch mal den betroffenen Codeabschnitt und gegebenfalls die Fehlermeldung. Sonst können wir dir nicht helfen. Und hör auf mit den ständigen Drachenlord-Anspielungen, die sind nämlich genau die Scheiße, auf die wir keinen Bock haben.
Re: While-Schleife für eine bestimmte Zeit lang ausführen
Verfasst: Mittwoch 20. April 2016, 21:09
von ProgrammierLord
Das ist ja etzela das Problem... es gibt keine Fehlermeldung, das Programm läuft einfach in einer unendlichen Dauerschleife, als hätte ich "while True" eingegeben...
finde übrigens witzig dass du als wohnort Wohnort: Altschauerberg 8 in 91448 Emskirchen angegeben hast, wo die leute hier doch genau auf diese Anspielungen keine Lust haben

Re: While-Schleife für eine bestimmte Zeit lang ausführen
Verfasst: Mittwoch 20. April 2016, 21:19
von snafu
Code: Alles auswählen
import time
def repeated_call(func, duration):
stop = time.time() + duration
while time.time() < stop:
func()
Re: While-Schleife für eine bestimmte Zeit lang ausführen
Verfasst: Mittwoch 20. April 2016, 21:37
von ProgrammierLord
@snafu: Und wie kann ich das jetzt in die While-Schleife einmeddeln?
Re: While-Schleife für eine bestimmte Zeit lang ausführen
Verfasst: Mittwoch 20. April 2016, 21:52
von Sirius3
@ProgrammierLord: das ist die while-Schleife. Die Funktion func sollte dabei nur kurz laufen, denn sonst wird ja die while-Bedingung nicht geprüft und damit die Schleife nicht nach 30s abgebrochen.
Re: While-Schleife für eine bestimmte Zeit lang ausführen
Verfasst: Mittwoch 20. April 2016, 22:21
von ProgrammierLord
@Sirius3: und wie muss ich dann duration eingeben? Einfach die Zahl oder anders?
Re: While-Schleife für eine bestimmte Zeit lang ausführen
Verfasst: Donnerstag 21. April 2016, 08:00
von /me
ProgrammierLord hat geschrieben:@Sirius3: und wie muss ich dann duration eingeben? Einfach die Zahl oder anders?
Warum ergreifst du nicht einfach die Eigeninitiative und schaust dir die selber die Dokumentation von
time.time an? Anhand dessen sollte eigentlich klar sein, was bei
duration angegeben werden muss.
Re: While-Schleife für eine bestimmte Zeit lang ausführen
Verfasst: Donnerstag 21. April 2016, 08:09
von snafu
ProgrammierLord hat geschrieben:und wie muss ich dann duration eingeben? Einfach die Zahl oder anders?
Die Anzahl in Sekunden. Bei dir also zum Beispiel 30.
Re: While-Schleife für eine bestimmte Zeit lang ausführen
Verfasst: Donnerstag 21. April 2016, 08:13
von snafu
ProgrammierLord hat geschrieben:@snafu: Und wie kann ich das jetzt in die While-Schleife einmeddeln?
Entweder `repeated_call` direkt aufrufen und die gewünschte Funktion übergeben (wobei ich bei der Funktionsübergabe bereits deine nächsten Probleme erwarte) oder den Code aus `repeated_call` übernehmen und in der Zeile, wo ``func()`` steht, die echte Funktion einsetzen. Im Falle der Codeübernahme müsstest du die `duration` dann natürlich auch direkt ersetzen bzw vorab ein ``duration = 30`` oder so machen.
Re: While-Schleife für eine bestimmte Zeit lang ausführen
Verfasst: Donnerstag 21. April 2016, 11:18
von snafu
Hier ist übrigens auch der Einsatz als Dekorator denkbar. Sinnfreies Beispiel:
Code: Alles auswählen
from __future__ import print_function
from functools import wraps
from time import sleep, time
def repeated_call(duration):
def decorator(func):
@wraps(func)
def wrapper(*args, **kwargs):
stop = time() + duration
while time() < stop:
func(*args, **kwargs)
return wrapper
return decorator
@repeated_call(duration=5)
def repeated_hello(name):
print('Hello', name)
sleep(0.5)
if __name__ == '__main__':
repeated_hello('World')
...ist letztlich aber nicht mehr als eine Spielerei. Soviel Code für eine simple Schleife ist geradezu Javaesk.
