【问题标题】:Discord.py API: loop does not break when user inputs "bingo"Discord.py API:当用户输入“bingo”时循环不会中断
【发布时间】:2020-11-03 04:02:15
【问题描述】:
elif "!bingo" in message.content.lower():
        await message.channel.send("Here's your miniature Bingo sequence")
        shuffled = shuffle(bingo)
        await message.channel.send(bingo[0:3])
        await message.channel.send(bingo[3:6])
        await message.channel.send(bingo[6:9])
        channel = message.channel
        while userinput != "bingo":
            await message.channel.send("Type anything to move on, or type bingo to end!")
            def check(m):
                return m.channel == channel
                userinput[0](str(m.content))
            if message.author == client.user:
                return
            else:
                msg = await client.wait_for('message', check=check)
                if str(userinput) == "bingo":
                    break
                else:
                    await message.channel.send(random.randint(1,9))

当您输入宾果游戏时,该函数应该会中断,但由于某种原因,用户输入字符串没有任何值。它在前面的代码中定义,所以它不是问题的原因。

请帮忙谢谢

【问题讨论】:

  • 谢谢大家,我找到了解决办法。两个 cmets 都没有完全解决问题(尽管第二条评论帮助我找到了存在的问题),循环很好,但问题是您无法将 str(userinput) 与字符串进行比较,因为 userinput 变量是列表。一个非常业余的错误。不管怎样,if 语句被修改为if "bingo" in userinput:。其他一切都保持不变。再次感谢您的帮助!
  • 您可以自己回答并接受您的问题,这有助于其他人在将来找到这个答案。

标签: python discord discord.py


【解决方案1】:
    def check(m):
        return m.channel == channel
        userinput[0](str(m.content))

第二部分永远不会执行,因为您总是返回第一条语句。 所以userinput 永远不会按预期设置为m.content

【讨论】:

  • 感谢您的帮助!该语句存在问题,因为它没有执行检查。然而,还有一个更明显的问题是 userinput 无法比较。我改用了in 语句。
【解决方案2】:

很简单的答案:

if str(userinput) == "bingo":
    return

break 应该用于退出函数。无论如何,它并不能很好地完成它的设计工作。

对不起,如果我错了,我对 discord.py 很陌生,但我对 Python 并不陌生。 Discord.py 可能正在改变一些与 Python 有关的东西。如果这不起作用,很遗憾,我可能无法为您提供帮助。

【讨论】:

  • 我认为 break 是用来跳出 while 循环而不是函数的。此时使用 return 会改变行为,因为在此函数中的 while 循环之后不会执行任何代码。
  • 嗯,正如我之前所说,break 不是很可靠。
  • 是什么让你这么想?我从来没有听说过任何 break 不能正常工作的情况。你有任何证据或例子吗?请参阅 Python Doc 以了解 break 应该做什么:“break 语句,就像在 C 中一样,跳出最内层的 for 或 while 循环。”
  • 根据我的经验,break 无法退出程序。
  • 退出程序是什么意思?既不返回也不中断退出程序。 Return 退出函数,break 退出循环或 switch/case...
猜你喜欢
  • 1970-01-01
  • 2018-07-20
  • 1970-01-01
  • 1970-01-01
  • 2018-10-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-16
相关资源
最近更新 更多