生成随机列表并终止它

时间:2018-08-09 13:02:02

标签: python list function random

我编写了以下代码,每3秒从列表l中生成一个随机字母。我的问题的第一部分是如何在1分钟后终止此过程?

import threading
import random
x = []
def printit():
    threading.Timer(3.0, printit).start()
    l = ['a', 'b', 'c', 'd']
    secure_random = random.SystemRandom()
    print x.append(secure_random.choice(l))

printit()

此外,我想从那些随机选择的字母中创建另一个列表,并将其命名为x,上面的代码可以完成此工作,这有一个小问题:当我打开代码时,它开始打印None,并且当我中断时并打印x,它会给出字母列表,然后继续打印None,这是因为一分钟后我不知道如何终止该过程。

3 个答案:

答案 0 :(得分:2)

您当然不应该将线程用于此类操作。

相反,只是

import time
import random

start_time = time.time()
rng = random.SystemRandom()

while time.time() - start_time < 60:  # End after a minute
    print(rng.choice('abcd'))
    time.sleep(3)

答案 1 :(得分:1)

如果您仍然想使用线程,请尝试以下代码:

import threading
import random
import time

x = []
start_time = time.time()


def printit():
    current_time = time.time()
    print(current_time - start_time)
    if current_time - start_time > 60.0:
        return
    threading.Timer(3.0, printit).start()
    l = ['a', 'b', 'c', 'd']
    secure_random = random.SystemRandom()
    x.append(secure_random.choice(l))

    print(x)

printit()

我在Python 3.6中测试了此代码,您可能需要更改print()以使其打印在Python 2中工作

答案 2 :(得分:0)

如果我不正确地理解您的问题,请添加

if x.length is 20:
     threading.Timer(3.0, printit).cancel()
在功能结束时

可能会有所帮助

相关问题