2010-01-30 223 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將被分配一個空字符串。