Извиняюсь, если это дубликат, я провел тщательный поиск и не смог найти ответ на этот конкретный вопрос.

Я строю программу, которая будет принимать входные данные в формате «XdY» (то есть 4d6, 1d20, 3d10 и т. Д.) И генерировать нужный бросок костей. Мне нужно превратить входную строку в два отдельных значения для количества выпавших кубиков и количества сторон на указанном кубике. Например, учитывая

roll = "3d6"

Я хочу закончить с

number = int("3")
sides = int("6")

Я предполагаю решение, которое разделит исходную строку на одну строку, содержащую все слева от «d» и одну со всем справа от нее, при этом отбрасывая сам символ «d». На данный момент у меня есть программа, настроенная для обработки значений «число» и «стороны», но только если они вводятся как две отдельные целые.

0
Alex Leonard 21 Авг 2018 в 04:05

3 ответа

Лучший ответ

Простое решение:

number, sides = map(int, roll.split('d'))

Просто разделите вашу roll строку на 'd', преобразуйте полученные строки в числа и присвойте их number и sides соответственно.

2
Lev Zakharov 21 Авг 2018 в 01:08

ИЛИ ЖЕ:

>>> roll = "3d6"
>>> number,sides=(int(i) for i in roll.split('d'))
>>> number
3
>>> sides
6
1
U10-Forward 21 Авг 2018 в 01:18

Простое регулярное выражение будет хорошо работать:

match = re.match(r"(\d+)d(\d+)", "2d10")
m.group(1) # '2'
m.group(2) # '10'
0
John Ellmore 21 Авг 2018 в 01:09
51940291