使用time.sleep()时遇到的问题,函数里的第一行代码不能正确运行,不知道问题出在哪里

下面是我的代码

import time

def inside(group, s):
    print('欢迎来到王者荣耀', end='')
    time.sleep(1)

    print(f'\r你出生在{group}方阵营', end='')
    time.sleep(1)

    while s:
        print(f'\r敌军还有{s}秒到达战场,请做好准备', end='')
        time.sleep(1)
        s -= 1

    print('\r全军出击')

inside('蓝色', 5)

代码运行的时候我发现第一行代码,‘欢迎来到王者荣耀’ 不能正常显示,效果是打印一个空行停顿一秒,然后正常显示后面的代码就像这样:

于是我尝试只运行

print('欢迎来到王者荣耀', end='')
time.sleep(1)

发现先停顿一秒才打印‘欢迎来到王者荣耀’,跟我想要的效果,先打印文字再停顿一秒正好反过来了,我找不到原因,只能尝试再字符串前面加上\r, 于是代码可以正常运行了,

import time
def inside(group, s):
    print('\r欢迎来到王者荣耀', end='')
    time.sleep(1)
    print(f'\r你出生在{group}方阵营', end='')
    time.sleep(1)
    while s:
        print(f'\r敌军还有{s}秒到达战场,请做好准备', end='')
        time.sleep(1)
        s -= 1
    print('\r全军出击')

inside('蓝色', 5)


虽然可以正常运行了,但是我无法解释之前为什么会出现延迟一秒且不显示字符串,以及先延迟一秒再显示字符串的情况。

以我浅薄的知识来看,使用print()后,会在自动字符串后面补上两个空白字符\r\n,\r负责将指针移到最左侧,\n负责换行,使用end=’’后,字符串末尾的空白字符将不再补充,只要后面打印的每个字符串前加上\r就可以实现将前一句话覆盖的效果,所以’欢迎来到王者荣耀’前无论加不加\r都不应该影响效果,可实际情况并非如此。

或许跟end=‘’有关,也可能跟time.sleep()有关,希望看到的黑客帮忙解释一下这个过程到底发生了什么,第一句话前不加\r为什么不能实现我想要的效果,感谢。

Jason990420
最佳答案

Print statement doesn’t output in real time, but bufferred.
Try add option flush=True to print immediately

8个月前 评论
讨论数量: 1
Jason990420

Print statement doesn’t output in real time, but bufferred.
Try add option flush=True to print immediately

8个月前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!