我想制作一个发送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)
答案 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个,每次重复都会得到一个新的顺序。