<p>你所能做的是有限度的,但是把所有的东西都收集到一个大字符串中,然后在屏幕清除之间打印一次,这比在一个循环中使用多个小打印要好。运行以下代码,看看程序的后半部分比前半部分运行得好多少:</p>
<pre><code>import time, os, random
def display1(chars):
os.system('cls')
for row in chars:
print(''.join(row))
def display2(chars):
os.system('cls')
print('\n'.join(''.join(row) for row in chars))
chars = []
for i in range(40):
chars.append(["-"]*40)
for i in range(100):
r = random.randint(0,39)
c = random.randint(0,39)
chars[r][c] = "X"
time.sleep(0.1)
display1(chars)
os.system('cls')
time.sleep(1)
chars = []
for i in range(40):
chars.append(["-"]*40)
for i in range(100):
r = random.randint(0,39)
c = random.randint(0,39)
chars[r][c] = "X"
time.sleep(0.1)
display2(chars)
</code></pre>
<p>编辑:您可以将这些想法与@gingerplus的优秀思想结合起来,以避免<code>cls</code>。诀窍是打印大量的退格。在</p>
<p>首先编写您自己的<code>cls</code>版本:</p>
^{pr2}$
<p>第一次它被称为零,它只是清除屏幕。在</p>
<p>以下函数将字符数组以一次大打印的方式推送到命令窗口,并返回打印的字符数(因为这是重新定位光标所需的退格数):</p>
<pre><code>def display(chars):
s = '\n'.join(''.join(row) for row in chars)
print(s)
return len(s)
</code></pre>
<p>这样使用:</p>
<pre><code>chars = []
for i in range(40):
chars.append(["-"]*40)
for i in range(100):
n = 0
r = random.randint(0,39)
c = random.randint(0,39)
chars[r][c] = "X"
time.sleep(0.1)
cls(n)
n = display(chars)
</code></pre>
<p>当上述代码运行时,显示变化平稳,几乎没有闪烁。在</p>