#python #discord #discord.py
#python #Discord #discord.py
Вопрос:
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))
Предполагается, что функция прерывается при вводе bingo, но по какой-то причине строка userinput не имеет никакого значения. Это определено ранее в коде, поэтому это не причина проблемы.
Пожалуйста, помогите, спасибо
Комментарии:
1. Спасибо всем, я нашел решение. Оба комментария не решили проблему полностью (хотя второй комментарий помог мне найти проблему, которая присутствовала), цикл был в порядке, но проблема заключалась в том, что вы не можете сравнивать
str(userinput)
со строкой, потомуuserinput
что переменная представляет собой список. Очень любительская ошибка. В любом случае, оператор if был изменен наif "bingo" in userinput:
. Все остальное осталось прежним. Еще раз спасибо за вашу помощь!2. Вы можете самостоятельно ответить и принять свой вопрос, это поможет другим найти этот ответ в будущем.
Ответ №1:
def check(m):
return m.channel == channel
userinput[0](str(m.content))
Вторая часть никогда не выполняется, поскольку вы всегда возвращаетесь с первым оператором.
So userinput
никогда не устанавливается m.content
по назначению.
Комментарии:
1. Спасибо за вашу помощь! В этом утверждении была проблема, поскольку он не выполнял проверку. Однако возникла более серьезная проблема, которую
userinput
невозможно было сравнить. Вместо этого я использовалin
оператор.
Ответ №2:
Довольно простой ответ:
if str(userinput) == "bingo":
return
break
предполагается, что он используется для выхода из функции. И в любом случае он не работает так хорошо, как задумано.
Извините, если я ошибаюсь, я довольно новичок в discord.py , но я не новичок в Python. Discord.py возможно, что-то меняется, связанное с Python. Если это не сработает, к сожалению, я, вероятно, не смогу вам помочь.
Комментарии:
1. Я думаю, что break используется для выхода из цикла while, а не функции. Использование возврата в этот момент изменяет поведение, поскольку никакой код после цикла while в этой функции выполняться не будет.
2. Ну, как я уже говорил,
break
это не очень надежно.3. Что заставляет вас так думать? Я никогда не слышал ни о каком случае, когда break не работал должным образом. У вас есть какие-либо доказательства или пример? Описание того, что должен делать break, см. В документе Python: «Оператор break, как и в C, выходит из самого внутреннего окружающего цикла for или while».
4. По моему опыту,
break
не удается выйти из программы.5. Что вы подразумеваете под выходом из программы? Ни return, ни break не завершают программу. Return завершает работу функции, а break завершает цикл или переключатель / регистр…