2010-01-30 85 views
2

我试图识别用户输入的字符串,例如“退出”或“加号”使用这样的:蟒蛇字符串分割

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

它适用于两个字的输入,但输入的不是一个字(“需要超过1个值解包“)。

接受一个/两个字输入的最佳方式是什么?

回答

2

最好方法是建立一个分析器,但如果你只是想要的东西,迅速开展工作,你可以只是你要允许的命令,如清单:

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

那么对于每个命令检查您的输入是否满足s.startswith(command)。如果是这样,你可以为该命令做适当的事情。

2

我确定有人会想出一个“Pythonic”解决方案,但接受它作为一个列表然后检查它后发生了什么?

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

对不起,我想我的大脑的C++侧越来越喜怒无常:)

编辑:也许str.partition是你在找什么。至少你保证一个三元组解开。请注意,如果您为命令添加第二个参数,您必须找到新的解决方案。

1
line = raw_input('>').split(" ", 1) 
command = line[0] 
data = line[1] if len(line) > 1 else "" 

请确保您使用raw_input,如果你不希望自己的数据被评价为Python表达式做。

4

除非你使用Python 3,否则你不应该使用input函数来进行用户输入。改用raw_input-功能。

至于实际问题;检索分割的结果作为列表。

列表中的第一项是命令,可选的下列项目是“参数”。

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

这是partition是什么:

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

如果指定只有一个字,data将被分配一个空字符串。