点数没有变化...请修复
The Number Of Points Isnt Changing... Please Fix
我想做一个快速射击类型的问题,基本上“j”是点的变量,我希望它每 0.5 秒 change/decrease(并检查消息)...问题是无论我尝试多晚,我都会得到 1000 分。我也是新人。 (顺便说一句,英语不好)
代码:
def check(m):
return m.author == message.author and m.channel
mn = randint(5, 15)
mn1 = randint(5, 10)
mz = mn * mn1
membed = discord.Embed(
title="Here's The Question",
description=str(mn) + " * " + str(mn1) + ''' Type Your Answer Below.. ''',
url=None,
color=discord.Color.blue())
mzz = await message.send(embed=membed)
j = 1100
for i in range(0, 5):
sleep(0.5)
j = j - 100
gt = await bot.wait_for('message', check=check)
if int(gt.content) == int(mz):
await message.send(f'Its Right.. You Got **{j}** Points')
else:
await message.send(f'Its Wrong.. The Answer Is **{j}**')
请帮忙...
问题是因为您误解了 await
的工作原理。
await foo()
使您的程序休眠 直到 foo()
returns 一个值。
当您键入 await bot.wait_for()
时,您说的是:
- 睡到
bot.wait_for()
returns 一个值
bot.wait_for()
只有returns一个值当它收到一条消息时。
您的程序的完整流程是:
- 您进入第一个循环
i = 0
。 j
设置为 1000。
- 你会一直睡到收到一条消息。因为你可以在未来的任何时间(比如十秒或十分钟或十五小时等)收到消息,所以你永远不会进入第二个循环
i = 1
。基本上,您的程序此时已冻结,直到有人向您发送消息。
这里的解决方案是让你的机器人 超时 等待消息,这样它就可以继续 i
的下一个值。超时告诉你的机器人在继续你的程序之前只休眠一段指定的时间。方便的是,wait_for
命令提供了一个timeout
参数:
j = 1100
for i in range(0, 5):
j = j - 100
try: # A try/except block is needed because this throws an error if bot times out
gt = await bot.wait_for('message', check=check, timeout=0.5)
if int(gt.content) == int(mz):
await message.send(f'Its Right.. You Got **{j}** Points')
break
else:
await message.send(f'Its Wrong.. The Answer Is **{j}**')
except:
continue
else:
await message.send("Whoops, you're out of time! You got zero points.")
我想做一个快速射击类型的问题,基本上“j”是点的变量,我希望它每 0.5 秒 change/decrease(并检查消息)...问题是无论我尝试多晚,我都会得到 1000 分。我也是新人。 (顺便说一句,英语不好)
代码:
def check(m):
return m.author == message.author and m.channel
mn = randint(5, 15)
mn1 = randint(5, 10)
mz = mn * mn1
membed = discord.Embed(
title="Here's The Question",
description=str(mn) + " * " + str(mn1) + ''' Type Your Answer Below.. ''',
url=None,
color=discord.Color.blue())
mzz = await message.send(embed=membed)
j = 1100
for i in range(0, 5):
sleep(0.5)
j = j - 100
gt = await bot.wait_for('message', check=check)
if int(gt.content) == int(mz):
await message.send(f'Its Right.. You Got **{j}** Points')
else:
await message.send(f'Its Wrong.. The Answer Is **{j}**')
请帮忙...
问题是因为您误解了 await
的工作原理。
await foo()
使您的程序休眠 直到 foo()
returns 一个值。
当您键入 await bot.wait_for()
时,您说的是:
- 睡到
bot.wait_for()
returns 一个值 bot.wait_for()
只有returns一个值当它收到一条消息时。
您的程序的完整流程是:
- 您进入第一个循环
i = 0
。j
设置为 1000。 - 你会一直睡到收到一条消息。因为你可以在未来的任何时间(比如十秒或十分钟或十五小时等)收到消息,所以你永远不会进入第二个循环
i = 1
。基本上,您的程序此时已冻结,直到有人向您发送消息。
这里的解决方案是让你的机器人 超时 等待消息,这样它就可以继续 i
的下一个值。超时告诉你的机器人在继续你的程序之前只休眠一段指定的时间。方便的是,wait_for
命令提供了一个timeout
参数:
j = 1100
for i in range(0, 5):
j = j - 100
try: # A try/except block is needed because this throws an error if bot times out
gt = await bot.wait_for('message', check=check, timeout=0.5)
if int(gt.content) == int(mz):
await message.send(f'Its Right.. You Got **{j}** Points')
break
else:
await message.send(f'Its Wrong.. The Answer Is **{j}**')
except:
continue
else:
await message.send("Whoops, you're out of time! You got zero points.")