我試圖識別用戶輸入的字符串,例如「退出」或「加號」使用這樣的:蟒蛇字符串分割
command, data = input('>').split(" ", 1)
它適用於兩個字的輸入,但輸入的不是一個字(「需要超過1個值解包「)。
接受一個/兩個字輸入的最佳方式是什麼?
我試圖識別用戶輸入的字符串,例如「退出」或「加號」使用這樣的:蟒蛇字符串分割
command, data = input('>').split(" ", 1)
它適用於兩個字的輸入,但輸入的不是一個字(「需要超過1個值解包「)。
接受一個/兩個字輸入的最佳方式是什麼?
的最好方法是建立一個分析器,但如果你只是想要的東西,迅速開展工作,你可以只是你要允許的命令,如清單:
commands = ['foo', 'bar', 'exit', 'hello world', 'add number']
那麼對於每個命令檢查您的輸入是否滿足s.startswith(command)
。如果是這樣,你可以爲該命令做適當的事情。
我確定有人會想出一個「Pythonic」解決方案,但接受它作爲一個列表然後檢查它後發生了什麼?
command_data = raw_input('>').split(" ", 1)
if len(command_data) > 1:
do some brilliant stuff next
對不起,我想我的大腦的C++側越來越喜怒無常:)
編輯:也許str.partition是你在找什麼。至少你保證一個三元組解開。請注意,如果您爲命令添加第二個參數,您必須找到新的解決方案。
line = raw_input('>').split(" ", 1)
command = line[0]
data = line[1] if len(line) > 1 else ""
請確保您使用raw_input
,如果你不希望自己的數據被評價爲Python表達式做。
除非你使用Python 3,否則你不應該使用input
函數來進行用戶輸入。改用raw_input
-功能。
至於實際問題;檢索分割的結果作爲列表。
列表中的第一項是命令,可選的下列項目是「參數」。
command, data = (input('>') + ' ').split(" ", 1)
這是partition
是什麼:
command, _, data = raw_input('>').partition(" ")
如果指定只有一個字,data
將被分配一個空字符串。