我用python编程了将近两年,在看一些旧代码时发现了一件很奇怪的事情。
import random, sys, time
try:
while True:
print(' ', str(random.randint(100,999)), end='')
time.sleep(0.01)
except:
sys.exit()
按照这段代码的语法,我的程序应该永远打印一个空格和一个从100到999的随机数,但这不会发生。
当我运行此代码时,直到按CTRL-C,屏幕上才会显示任何内容,即使删除try语句也不会改变任何内容。
我尝试更改控制台(Windows终端,powershell和CMD),但没有任何反应。
请有人帮我解决这个问题吗?谢谢
答案 0 :(得分:4)
此答案Python sleep() inhibit print with comma?建议在sys.stdout.flush()
和print
之间添加sleep
。经过测试-有效。
答案 1 :(得分:4)
Python将打印输出保留在缓冲区中,并等待行的末尾才真正显示它。
要在Python 3中强制显示,可以添加关键字flush=True
。
import random, sys, time
try:
while True:
print(' ', str(random.randint(100,999)), end='', flush=True)
time.sleep(0.01)
except:
sys.exit()
或者,您可以:
sys.stdout.flush()
(与Python 2兼容); -u
)时使用python -u script.py
标志; PYTHONUNBUFFERED
设置为TRUE
。答案 2 :(得分:1)
您正在使用哪个版本的 PYTHON ?我可以在 PYCHARM 2019.2.4 中使用 PYTHON 3.7 的PC上运行您的代码。
它还可以在 PYTHON 3.7.5 Shell
答案 3 :(得分:0)
尝试一下:
import random, sys, time
try:
while True:
print(' ', str(random.randint(100,999)), end='', flush=True)
time.sleep(1)
except:
sys.exit()
答案 4 :(得分:-1)
这是因为您有一个永远循环的while True
子句,导致它无限递归地循环。
这是更新的代码
import random, sys, time
try:
while True:
print(' ', str(random.randint(100,999)), end='')
time.sleep(0.01)
break
except:
sys.exit()
我添加了一个break
语句以退出循环。