在字符串中添加函数

2024-06-28 19:56:37 发布

您现在位置:Python中文网/ 问答频道 /正文

我想使用time.sleep()在字符串中添加特定的时间延迟,我正在构建一个文本交互游戏,我尝试了以下方法:

print(f"**inner thoughts** hmmmmm... {time.sleep(2)} maybe big nuke? {time.sleep(2)} or AK 47s for everyone? {time.sleep(2)} or kill him with our kindness? {time.sleep(2)} ")

问题是当我执行代码时,我得到的是(无)而不是时间延迟

inner thoughts hmmmmm... None maybe big nuke? None or AK 47s for everyone? None or kill him with our kindness? None


Tags: ornonefortimesleepinnerakkill
2条回答

我提供了解决这个问题的模板方法

版本1,使用flag剪切文本(|对于此示例):

text = "**inner thoughts** hmmmmm... | maybe big nuke? | or AK 47s for everyone? | or kill him with our kindness? |"
array = text.split("|")
for s in array:
    print(s, end="")
    time.sleep(1)

版本2:自定义延迟时间

import time
import re

text = "**inner thoughts** hmmmmm... {2} maybe big nuke? {2} or AK 47s for everyone? {1} or kill him with our kindness? {2}"
sub_text_array = re.split(r"{\d+}", text)
delay_array = [0] + [int(s) for s in re.findall(r"{(\d+)}", text)]
for index in range(len(sub_text_array)):
    time.sleep(delay_array[index])
    print(sub_text_array[index], end="")

f-串一次全部构建;您将看不到这种带有延迟的打印片段,因为当您sleep时字符串还没有结束,所以print甚至还没有被调用。如果您想这样做,您必须进行单独的print调用,中间有sleep;将其嵌入f字符串没有任何好处,您可能希望在等待之前执行类似操作以实际打印每个组件:

print("**inner thoughts** hmmmmm... ", end="", flush=True)
time.sleep(2)
print(" maybe big nuke? ", end="", flush=True)
time.sleep(2)
print(" or AK 47s for everyone? ", end="", flush=True)
time.sleep(2)
print(" or kill him with our kindness? ", end="", flush=True)
time.sleep(2)
print(" ")

end=""确保您不会移动到新行(遵循原始的一体式字符串格式),而flush=True确保数据不会在您睡觉时卡在缓冲区中等待(没有它,可能的行为是等待八秒钟,然后所有文本立即作为最后print的新行出现)导致行缓冲转储缓冲区)

相关问题 更多 >