我正在构建一个可以一次计算多个骰子的机器人,截至目前,我可以添加多个骰子和固定数字,但要减去,语法如下所示:#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))
答案 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"]
而且我相信您可以从那里轻松解析此列表以运行您想要的任何计算:)