我写了一段代码来模拟 Matrix 中的二进制数流。它工作得很好,每当我运行这段代码时,人们都会问我是否在破解某些东西。在 MacOS 10.12.3 上运行。
#!/usr/local/bin/python3.6
import random
import time
while True:
for j in range(204): #my full screen terminal is 204 characters wide
print(random.randint(0,1),end='')
time.sleep(0.0001)
print('')
但是,此代码效率非常低,并且会耗尽大量电量。那么有没有办法让这段代码更省电呢?另外,我不希望我的硬盘驱动器有大量的 I/O。
最佳答案
有几种方法可以改进它。一种方法是以编程方式获取终端宽度:
import shutil
terminal_width = shutil.get_terminal_size().columns
另一种方法是一次性生成随机数字。这是两种不同方法的比较:
In [52]: %timeit ''.join([str(random.randint(0, 1)) for i in range(terminal_width)])
1000 loops, best of 3: 380 µs per loop
In [53]: N = 2**terminal_width - 1
In [54]: %timeit bin(random.randint(0, N))[2:].zfill(terminal_width)
100000 loops, best of 3: 3.05 µs per loop
结合这两者,你得到:
import time
import shutil
import random
terminal_width = shutil.get_terminal_size().columns
N = 2**terminal_width - 1
while True:
digits = bin(random.randint(0, N))[2:].zfill(terminal_width)
print(digits)
time.sleep(1/60)
请注意,终端滚动可能是脚本中的一个限制因素,因此您可能需要考虑使用 curses
界面并就地绘制。这是 an example project使用 curses 模块的原始效果。
关于python - 如何让随机算法更有效率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43444406/