我正在制作一个不和谐的python机器人。我已经让机器人识别一个!roll
命令,我已经让它识别方程,如果它们都是间隔的。例如:!roll d6 + d6 × d20
.
我正在努力的是让机器人接受一个命令,这个命令都在一个"单词"中,例如,!roll d6+d6×d20
。我正试图制作一个代码,将这个"词"分开。在手术室。结果应该与第一个示例类似。
我有一些代码,我将在下面添加我已经有了。我一次只做一个手术,所以我只需要帮助解决一个,然后我就可以把它用于所有其他的。
我还让它打印"e"现在的一个指示。如有需要,请更改。我很感激你的帮助。
prompt = "!roll 2d8 + d20 /d4+ d6"
a = "+"
b = "×"
c = "÷"
d = "/"
e = "<"
f = ">"
g = "%"
h = "*"
sp = " "
for x in prompt:
e = prompt.index(x)
if (x == a) and (prompt[e -1] == " ") and (prompt[e+1] == " "):
continue
else:
print("e")
print(prompt)
如果你想尝试一下,这里有一种不需要正则表达式的方法:
from random import randint
def roll(dice_string):
result = ""
for index in range(len(dice_string)):
char = dice_string[index]
if char.isdigit() and (index == len(dice_string) - 1 or not dice_string[index + 1].isdigit()):
result += char + ")"
else:
result += char
result = result.replace('d', '~~~')
result = result.replace('~~~', 'randint(1, ')
result = result.replace('x', '*')
result = result[6:]
print(result)
try:
result = eval(result)
except Exception as e:
print("Whoops:", e)
return int(result)
print(roll("!roll d6+d6xd20"))
无可否认,这是有点粗糙,但它似乎工作。