python - 如何让随机算法更有效率

标签 python algorithm python-3.x random

我写了一段代码来模拟 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/

相关文章:

python-3.x - Tensorflow 错误 "UnimplementedError: Cast string to float is not supported"- 使用估计器的线性分类器模型

python-3.x - 如何检查系列中的值是否唯一

python - 在 Python 中查找数字的所有因数的最有效方法是什么?

Python、__init__ 和 self 混淆

algorithm - 跟踪 FIFO 队列中的最大元素

java - 总和小于等于 k ​​的最长子数组

list - 通过函数传递列表的所有元素

python tcp socket - 为什么仅在 close() 之后发送 sendall 消息

python - 为什么这个简单的递归树遍历算法会失败?

c# - 最优雅的生成素数的方法