向 RPG 骰子不和谐机器人添加减法

时间:2021-04-30 08:13:46

标签: python python-3.x discord.py

我正在构建一个可以一次计算多个骰子的机器人,截至目前,我可以添加多个骰子和固定数字,但要减去,语法如下所示:#roll 1d20+-1d6,我已经试图只能输入“-”符号,但我找不到办法。代码如下。

@bot.command(name="roll")
async def roll(ctx, dices: str):
    l_dices = dices.split("+")
    length = len(l_dices)
    values = []
    total = 0
    valueString = ""

    #loops through every dice/modifier
    for x in l_dices:
        #checks if it is a dice or modifier value
        if "d" in x:
            #splits between number of dices and number of sides in each dice
            number = int(x.split("d")[0])
            sides = int(x.split("d")[1])
            for i in range(number):
                #gets a random value in the range of the dice
                dice_result = random.randrange(1, sides + 1)
                values.append(dice_result)
                
                #adds every die to a list to show individual dice results
                if valueString == '':
                    valueString += str(dice_result)
                else:
                    valueString += ', ' + str(dice_result)
        else:
            #adds together every modifier
            total += int(x)
    #gets the final result
    total += sum(values)
    #show the final results in chat
    await ctx.send(ctx.message.author.mention + "\n:VALORES:\n" + valueString + "\n:RESULTADO:\n" + str(total))

1 个答案:

答案 0 :(得分:0)

问题是目前您使用“+”作为分隔符,正如您在以下定义的:

l_dices = dices.split("+")

这意味着,您只是通过“+”号分隔命令的各个部分,别无其他。因此,为了解决这个问题,您需要解决解析用户输入的方式。我个人建议使用正则表达式,因为这将使您将来可以轻松添加更多分隔符。这是一个快速代码片段,它通过 + 和 - 符号解析您的命令:

import re
def parsecommand(command_string):
    commands = re.split(r"(\+|\-)",command_string)
    return commands

这将解析命令字符串,用 + 或 - 分割,并添加输出符号。例如:

>>>commandstr = "d6+d8-2d12"
>>>print(parsecommand(commandstr))
["d6","+","d8","-","2d12"]

而且我相信您可以从那里轻松解析此列表以运行您想要的任何计算:)