Uwzględniłem poprawki morkowskiego oraz odchudziłem kod w sekcji __main__. Kod ma zbliżoną liczbę linii, ale to dlatego że zgodnie z PEP8 rozdzieliłem ciała funkcji dodatkowymi spacjami.
#!/usr/bin/env python3
def time_tuple_to_string(time_tuple):
return "{0:02d}:{1:02d}:{2:02d}".format(*time_tuple)
def time_tuple_to_seconds(time_tuple):
return sum(a * b for a, b in zip(time_tuple, (3600, 60, 1)))
def seconds_to_time_tuple(time_seconds):
minutes, seconds = divmod(time_seconds, 60)
hours, minutes = divmod(minutes, 60)
return (hours, minutes, seconds)
def intervals_number(start, stop, step):
start_sec, stop_sec, step_sec = map(time_tuple_to_seconds,
(start, stop, step))
return (stop_sec - start_sec) // step_sec
def time_range(start, stop, step):
time_range = map(time_tuple_to_seconds, (start, stop, step))
for time_sec in range(*time_range):
yield seconds_to_time_tuple(time_sec)
def time_range_with_reset(start, stop, step):
start_sec, stop_sec, step_sec = map(time_tuple_to_seconds,
(start, stop, step))
current_sec = start_sec
while current_sec <= stop_sec:
new_start = yield seconds_to_time_tuple(current_sec)
current_sec = (time_tuple_to_seconds(new_start)
if new_start is not None else current_sec + step_sec)
def print_current_time_loop(generator, n=4):
for __ in range(n):
print("Current time -> "
+ time_tuple_to_string(next(generator)))
if __name__ == "__main__":
start = (14, 10, 2)
stop = (18, 16, 31)
step = (0, 24, 39)
start_str, stop_str, step_str = map(time_tuple_to_string,
(start, stop, step))
print("Start: " + start_str + "\nStop " + stop_str + "\nStep: " + step_str
+ "\n" + "-"*(len(time_tuple_to_string(step)) + 6))
for current_time in time_range(start, stop, step):
print("Current time -> " + time_tuple_to_string(current_time))
print(("\nIntervals number -> {0:d}\n"
.format(intervals_number(start, stop, step))))
time_range_reset = time_range_with_reset(start, stop, step)
print_current_time_loop(time_range_reset)
print("Current time -> "
+ time_tuple_to_string(time_range_reset.send((15, 0, 0)))
+ " # changed")
print_current_time_loop(time_range_reset, 3)