使用 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=}")
我正在尝试在 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=}")