Вот то, что вы хотите, используя регулярное выражение и простое понимание списка.
Это довольно надежный и неприятный ввод.Он соответствует вашему запросу на «первые 4 целых числа в строке ввода», так как находит первые 4 целых числа на входе, разделенных ЛЮБЫМИ нечисловыми символами.
import re
def getMove(playerInput):
m = re.search('([\d]+)[\D]*([\d]+)[\D]*([\d]+)[\D]*([\d]+)[\D]*', playerInput)
if m:
nums = [int(x) for x in m.groups()]
else:
raise ValueError("Invalid argument")
return ((nums[0], nums[1]),(nums[2], nums[3]))
Примеры ввода / вывода:
Вход: "((12,5wf),(21,4xx))"
Выход: ((12, 5), (21, 4))
Вход: "((0,1),(2,3))"
Выход: ((0, 1), (2, 3))
Вход: " (0, 1),(2, 3)"
Выход: ((0, 1), (2, 3))
Примечание: Это всегда будет стараться получить 4 числа, поэтому, если вместо значения ValueError вводится значение (12, 5, 4), он выберет 1, 2, 5 и 4.как числа.Если вы предъявляете более строгие требования к формату ввода, соответствие регулярного выражения можно настроить, чтобы избежать этой проблемы.Если я неправильно интерпретирую ваш формат ввода, дайте мне знать, и я могу исправить выражение, чтобы избежать такого поведения.