使用 split() 将字符串拆分为更小的字符串

Splitting a string into smaller strings using split()

我正在尝试在 Python 中编写 D&D 骰子滚轮程序。我想以“xdy+z”的形式输入输入(例如 4d6+12,意思是掷 4 个 6 面 di 并将结果加 12),并让程序“掷骰子”,添加修饰符,并输出结果。我正在尝试弄清楚如何将字符串拆分为数字,以便让程序进行数学运算。

我知道 split() 函数,我正在尝试使用它。当我输入上面的示例时,我得到字符串 [4 6 12],但是当我让程序打印字符串 [1] 时,我得到一个白色的 space,因为它仍然是一个完整的字符串。我要么想弄清楚如何让程序识别字符串中的各个数字,要么想办法将整个字符串拆分成更小的字符串(如 string1 = [4]、string2 = [6]、string3 = [ 12]).

是的,我尝试了 Google 并搜索了该站点,但我不确定此类过程的术语是什么,因此很难找到帮助。

相关代码如下:

separators = ["d", "+", "-"]
for sep in separators:
     inputText = inputText.replace(sep, ' ')

您可以为此使用正则表达式,而不是拆分字符串。只需用一组捕获每个数字位置。查看 re package 上的文档了解详细信息。

这是一个示例:

import re

pattern = r"(?P<rolls>\d+)d(?P<sides>\d+)\+(?P<add>\d+)"
match = re.match(pattern, input_text)
rolls = int(match["rolls"])
sides = int(match["sides"])
add = int(match["add"])

在您的示例中,input_text 为“4d6+12”,结果值为:

print(rolls) # 4
print(sides) # 6
print(add) # 12

没有正则表达式的解决方案,使用find、切片和split。首先,找到 +- 的位置以获得最后一个数字。然后,将其余部分拆分为 d。另外,将部分字符串转换为 int:

s = "4d6+12"

if "-" in s:
    pos = s.find("-")
    add = int(s[pos:])
elif "+" in s:
    pos = s.find("+")
    add = int(s[pos:])
else:
    add = 0
    pos = len(s)

rolls, sides = map(int, s[:pos].split("d"))

print(f"{rolls=} {sides=} {add=}")