Как сделать случайные броски кубиками?

Рейтинг: 0Ответов: 1Опубликовано: 09.06.2023

Недавно захотел сделать телеграмм бота на библиотеке bytelegrambotapi который будет кидать дайсы(кубики с разным количеством граней и чем больше граней тем больше результат может выпасть на дайсе). Проблема в том что мне надо определить сколько дайсов хочет кинуть пользователь. Я пытался использовать индексы сообщения. Есть вот такая команда '/r 1d6' где число до 'd' это количество дайсов, а после, это сколько граней у дайса.

kol_vo=message.text[3]
ed=message.text[4]    
if '/r' in message.text and 'd4' in message.text and len(message.text)==6:
    for i in range(int(kol_vo)):
        bot.send_message(message.chat.id, random.randint(1, 4))
if '/r' in message.text and 'd4' in message.text and len(message.text)==7 int(kol_vo)>=1 and 
    int(ed)>=1:
    a = str(kol_vo) + str(ed)
    chs=int(a)
    for i in range(int(chs)): 
        bot.send_message(message.chat.id, random.randint(1, 4))

Вот такой вот код я написал. В первом условии мы можем кинуть четырехгранный дайс до 9 раз, а во втором мы узнаем являются ли 3 и 4 индекс сообщения числами и если да, то получается количество дайсов двухзначное. По крайней мере второе условие должо работать так, но почему то он так не работает. Пожалуйста исправьте мой код или если у вас есть, скиньте готовый.

Ответы

▲ 0Принят

Ваш код не трогаю. Проще решить задачу с начала.

Регулярное выражение проверит что команда задана верно и выделит параметры:

match = re.match(r'^/r\s+(\d+)d(\d+)$', message.text)
if match:
    n = int(match.group(1))
    m = int(match.group(2))
    for _ in range(n):
        bot.send_message(message.chat.id, random.randint(1, m))