Как очищать консоль?

Пытался реализовать секундомер в консоли, но не нашел способа, как очищать консоль, при новой выдаче. Суть в том, что нужно чтобы значения обновлялись, а не выводились каждый раз на новую строку. Сам код:

import time, os
seconds,minutes,hours = 0,0,0
while True: 
    time.sleep(1)
    
    if seconds == 60:
        seconds = 0
        minutes+=1
    if minutes == 60:
        minutes = 0
        hours+=1
    if hours > 0:
        print(f"{'hours'} : {hours:02}    {'minutes'} : {minutes:02}    {'seconds'} : {seconds:02}")   
    elif minutes > 0:
        print(f"{'minutes'} : {minutes:02}    {'seconds'} : {seconds:02}")
    else: 
        print(f"{'seconds'} : {seconds:02}",sep='',end='\r')
        os.system('cls||clear')
    seconds+=1

Пишу на Windows, VSCode.


Ответы (3 шт):

Автор решения: Johan

Попробуйте сделать так:

print(f"\r{'hours'} : {hours:02}    {'minutes'} : {minutes:02}    {'seconds'} : {seconds:02}", end="")

Ну и для всех остальных, соответственно. То есть, \r возвращает каретку в начало строки, а end="" не переносит ввод на следующую, то есть, если в обычном print обычно конец вывода сообщения заканчивается \n, то в этом случае переноса не будет.

Ну и в этом случае очищать вывод не нужно, то есть os.system('cls||clear') можно убрать.

Вот результат работы. Как видите, уже досчитало до 8 без переносов.

введите сюда описание изображения

→ Ссылка
Автор решения: Valera1501

Попробуй так:

import os
clear = lambda: os.system('cls')
clear()
→ Ссылка
Автор решения: Namerek

Фантазия на тему:

import time

start = time.monotonic()
while True:
    current = (loop_start := time.monotonic()) - start
    min_total, seconds = divmod(current, 60)
    hours, minutes = divmod(min_total, 60)

    time_pattern = (
        ('hours {:02}', int(hours), ()),
        ('minutes {:02}', int(minutes), (hours,)),
        ('seconds {:02}', int(seconds), (minutes, hours)),
    )
    time_string = ' '.join(
        map(lambda x: x[0].format(x[1]), filter(lambda x: x[1] or any(x[2]), time_pattern))
    )
    print(
        time_string, end='\r'
    )
    delay = 1 - (time.monotonic() - loop_start) % 1
    
    time.sleep(
        delay
    )

введите сюда описание изображения

→ Ссылка