У меня очень ограниченный опыт работы с регулярными выражениями, поэтому я надеюсь, что кто-нибудь может мне помочь.
Я делаю игру на Python 3 с прямоугольной сеткой в качестве доски.Я пытаюсь сделать так, чтобы пользователи могли вводить несколько координат доски одновременно в следующей форме в строку с именем coords
:
(x1, y1), (x2, y2), (x3, y3), ... (xn, yn)
Я хочу, чтобы вывод представлял собой список кортежей с именем cells
в аналогичной форме:
[(x1, y1), (x2, y2), (x3, y3), ... (xn, yn)]
По сути Я хочу имитировать, как кортежи могут быть написаны в коде Python.
Сейчас я использую:
cells = [tuple(coords[i.find('(') + 1: i.rfind(')')].split(',')) for i in coords.split()]
, который дает желаемый результат для входных данных в форме (1,2) (3,4) (5,6)
, без пробелов внутри введенных кортежей и пробелов между кортежами.Тем не менее, это ломается для входов, не следующих точно за этой формой, и ничего не делает для проверки правильности входных данных.Для каждого x- и y-значения в кортежах cells
, мне нужно проверить , что:
- type (y-value) == type (x-value)) == int
- 0 <= значение y <game_board.height </li>
- 0 <= значение x <game_board.width </li>
В идеале, если пользователивводит несколько действительных координат и несколько недействительных, действительные кортежи будут добавлены к cells
, и пользователю будет выдано сообщение, подобное "The following coordinates were invalid: (x1, y1), ..."
.
Я знаю, что мог бы сделать все это с путаницей циклови управление потоком, но есть ли еще Pythonic способ сделать это с помощью регулярного выражения ?
Редактировать: правописание