在python3中打印时使用sleep()

时间:2018-01-25 15:26:38

标签: python-3.x printing sleep

我在编程时遇到问题。我试图在print()中使用sleep()。输入是:

print(f'New year in 5{sleep(1)}.4{sleep(1)}.3{sleep(1)}.2{sleep(1)}.1{sleep(1)}. NEW YEAR!')

输出是:

New year in 5None.4None.3None.2None.1None. NEW YEAR!

延迟发生在屏幕上打印之前。 我正在使用最新版本的python。 我会等待答案。

2 个答案:

答案 0 :(得分:0)

可以使用end属性调用打印。默认值是换行符,但您可以选择只放置一个空格。

print('New year in 5', end=' ')

所以你打印的下一件事就是在同一条线上。

这允许您在打印之外移动睡眠功能。

print('New year in 5', end=' ')
sleep(1)
print('4', end=' ')
sleep(1)
print('3', end=' ')
# ...

答案 1 :(得分:0)

您的代码无法正常工作,因为传递给打印功能的所有对象都可以一次性解析和打印。

因此,当您通过多个sleep()时,它们都被编译并且有一个初始等待,最后您的消息被打印出来..

结果中的None是time.sleep()函数的返回

解决方案: 实现倒计时功能 确保每次都打印到同一行,只更改时间。这是通过使用' \ r'来实现的。并结束=""在python3打印功能

但是有一个小问题,你的时间中的te数字减少一个,可以通过用所有空格替换现有的打印行来处理

#!/usr/bin/python3
import time
def countdown(start):
    while start > 0:
        msg = "New year starts in: {} seconds".format(start)
        print(msg, '\r', end="")
        time.sleep(1)

        # below two lines is to replace the printed line with white spaces
        # this is required for the case when the number of digits in timer reduces by 1 i.e. from
        # 10 secs to 9 secs, if we dont do this there will be extra prints at the end of the printed line
        # as the number of chars in the newly printed line is less than the previous
        remove_msg = ' ' * len(msg)
        print( remove_msg, '\r', end="")        

        # decrement timer by 1 second
        start -= 1
    print("Happy New Year!!")
    return



if __name__ == '__main__':
    countdown(10)