разделение строки питона - PullRequest
2 голосов
/ 30 января 2010

Я пытаюсь распознать введенные пользователем строки, такие как «выход» или «добавить номер», используя это:

 command, data = input('>').split(" ", 1)

Работает для ввода двух слов, но не для ввода одного слова («для распаковки нужно более 1 значения»).

Каков наилучший способ приема одного или двух слов?

Ответы [ 5 ]

3 голосов
/ 30 января 2010

Вот для чего partition:

command, _, data = raw_input('>').partition(" ")

Если было указано только одно слово, data будет присвоена пустая строка.

2 голосов
/ 30 января 2010

Лучшим способом является создание парсера, но если вы просто хотите, чтобы что-то работало быстро, вы можете просто получить список команд, которые вы хотите разрешить, например:

commands = ['foo', 'bar', 'exit', 'hello world', 'add number']

Затем для каждой команды проверьте, удовлетворяет ли ваш ввод s.startswith(command). Если это так, вы можете сделать соответствующую вещь для этой команды.

2 голосов
/ 30 января 2010

Я уверен, что кто-то собирается придумать «Pythonic» решение, но что случилось с тем, чтобы просто принять его как список и проверить его позже?

command_data = raw_input('>').split(" ", 1)
if len(command_data) > 1:
  do some brilliant stuff next

Извините, я думаю, что C ++ сторона моего мозга становится капризной:)

Редактировать: Возможно, str.partition - это то, что вы ищете. По крайней мере, вам гарантировано 3 кортежа для распаковки. Имейте в виду, если вы добавите второй аргумент в команду, вам нужно будет найти новое решение.

1 голос
/ 30 января 2010
command, data = (input('>') + ' ').split(" ", 1)
1 голос
/ 30 января 2010
line = raw_input('>').split(" ", 1)
command = line[0]
data = line[1] if len(line) > 1 else ""

Убедитесь, что вы используете raw_input, если не хотите, чтобы ваши данные оценивались как выражение Python.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...