我正在尝试使用以下方法识别用户输入的字符串,例如“exit”或“add number”:
command, data = input('>').split(" ", 1)
它适用于两个单词输入,但不适用于输入的一个单词(“需要多于1个值才能解压缩”)。
接受单/两个字输入的最佳方式是什么?
答案 0 :(得分:3)
这是partition
的用途:
command, _, data = raw_input('>').partition(" ")
如果只指定了一个单词,data
将被分配一个空字符串。
答案 1 :(得分:2)
我确信有人会想出一个“Pythonic”解决方案,但是之后只是接受它作为列表并在之后检查它?
command_data = raw_input('>').split(" ", 1)
if len(command_data) > 1:
do some brilliant stuff next
抱歉,我认为我脑中的C ++方面变得情绪化:)
编辑:也许str.partition是您正在寻找的。至少你保证打开3元组。请注意,如果您在命令中添加第二个参数,则必须找到新的解决方案。
答案 2 :(得分:2)
最佳方式是构建一个解析器,但是如果你只想要一些快速工作的东西,你可以只列出你想要允许的命令,例如:
commands = ['foo', 'bar', 'exit', 'hello world', 'add number']
然后对每个命令检查您的输入是否满足s.startswith(command)
。如果是这样,你可以为该命令做适当的事情。
答案 3 :(得分:1)
line = raw_input('>').split(" ", 1)
command = line[0]
data = line[1] if len(line) > 1 else ""
如果您不希望将数据评估为Python表达式,请确保使用raw_input
。
答案 4 :(得分:1)
command, data = (input('>') + ' ').split(" ", 1)