如何使随机选择python不同?

时间:2019-05-26 21:22:09

标签: python

我想制作一个发送3个表情符号但其表情符号不同的机器人,但是当我运行它时,该机器人接收了一个表情符号并发送相同的3个表情符号,我该如何使它接收其他3个表情符号?

list  = ['', '', '', '', '', '', '', '', '', '', '', '', '', '']
text = random.choice(list)

那个代码

编辑:您能告诉我这是怎么回事吗?

import discord
import requests
import random
import sys

token = sys.argv[1]
chan = sys.argv[2]
client = discord.Client()
list = requests.get('emoji.txt').text.split("\n")

@client.event
async def on_ready():
    txtchan = client.get_channel(int(chan))
    while not client.is_closed():
        message = ''
        for x in range(5):
            message += random.choice(list)
        await txtchan.send(message)
client.run(token, bot=False)

4 个答案:

答案 0 :(得分:1)

正确的代码将是

$ /bin/python3.6 fastfileperformance.py
Python   timedifference 0:00:00.703964
FastFile timedifference 0:00:00.813478
fastfile_time 1.16%, python_time 0.87% = 0.13%
$ /bin/python3.6 fastfileperformance.py
Python   timedifference 0:00:00.703432
FastFile timedifference 0:00:00.809531
fastfile_time 1.15%, python_time 0.87% = 0.13%
$ /bin/python3.6 fastfileperformance.py
Python   timedifference 0:00:00.705319
FastFile timedifference 0:00:00.814130
fastfile_time 1.15%, python_time 0.87% = 0.13%
$ /bin/python3.6 fastfileperformance.py
Python   timedifference 0:00:00.711852
FastFile timedifference 0:00:00.837132
fastfile_time 1.18%, python_time 0.85% = 0.15%
$ /bin/python3.6 fastfileperformance.py
Python   timedifference 0:00:00.695033
FastFile timedifference 0:00:00.800901
fastfile_time 1.15%, python_time 0.87% = 0.13%
$ /bin/python3.6 fastfileperformance.py
Python   timedifference 0:00:00.694661
FastFile timedifference 0:00:00.796754
fastfile_time 1.15%, python_time 0.87% = 0.13%
$ /bin/python3.6 fastfileperformance.py
Python   timedifference 0:00:00.699377
FastFile timedifference 0:00:00.816715
fastfile_time 1.17%, python_time 0.86% = 0.14%
$ /bin/python3.6 fastfileperformance.py
Python   timedifference 0:00:00.699229
FastFile timedifference 0:00:00.818774
fastfile_time 1.17%, python_time 0.85% = 0.15%

这将随机采样3个表情符号。将数字更改为要绘制的样本数。

答案 1 :(得分:0)

例如这样的

list  = ['', '', '', '', '', '', '', '', '', '', '', '', '', '']
text = set() #~ Set contains only unique elements
while len(text) < 3:
    text.add(random.choice(list))

此后应始终包含3个元素,但如果伪随机会“随机”选择相同表情符号的999倍,则可能会花费更长的时间,这几乎是不可能的,但是有机会。

另一种方式,时间更恒定是随机播放:

list  = ['', '', '', '', '', '', '', '', '', '', '', '', '', '']
random.shuffle(list)
text = list[:3]

但是,在不进行复制的情况下,请始终将第一个list变量洗牌。

Offtopic:list是python解释器中的关键字,请不要在代码中使用像函数list()这样的变量。我认为这会激怒您。

@EDIT: 首先,将变量名list更改为array。 然后,它应该起作用:

@client.event
async def on_ready():
    txtchan = client.get_channel(int(chan))
    while not client.is_closed():
        message = ''.join(random.sample(array, 3))
        await txtchan.send(message)
    client.run(token, bot=False)

如果它不起作用,并且发生了一些错误,请将其发送给我们。没有这一点,那里的大多数人将无法轻松快速地对其进行测试,并告诉您什么是不正确的。

我希望这不是您包含的所有代码,因为不足以正确地使bot登录不和谐;)

答案 2 :(得分:0)

您可以使用random.choices()

import random

l = [*range(100)]
choices = random.choices(l, k=3)
print(choices)

更新。

对不起,我错过了这个事实,您需要选择唯一的值。为此,您可以使用random.sample()

choices = random.sample(l, 3)

答案 3 :(得分:0)

您可以循环生成random.sample产生的生成器。每次用完所有样本后,循环将继续并创建一个新样本。然后使用itertools.slice随时随地抓住想要的东西。

from itertools import islice
import random

def ran(l):
    while True:
        yield from random.sample(l, len(l))

l  = ['', '', '', '', '', '', '', '', '', '', '', '', '', '']

randIter = ran(l)
for i in range(20):
    print(list(islice(randIter, 7))) # pull off 7 at a time to make it easy to verify:

结果

['', '', '', '', '', '', '']
['', '', '', '', '', '', '']
['', '', '', '', '', '', '']
['', '', '', '', '', '', '']
['', '', '', '', '', '', '']
['', '', '', '', '', '', '']
['', '', '', '', '', '', '']
['', '', '', '', '', '', '']
['', '', '', '', '', '', '']
['', '', '', '', '', '', '']
['', '', '', '', '', '', '']
['', '', '', '', '', '', '']
['', '', '', '', '', '', '']
['', '', '', '', '', '', '']
['', '', '', '', '', '', '']
['', '', '', '', '', '', '']
['', '', '', '', '', '', '']
['', '', '', '', '', '', '']
['', '', '', '', '', '', '']
['', '', '', '', '', '', '']

这会在重复之前按随机顺序使用全部14个,每次重复都会得到一个新的顺序。