2016-01-22 63 views
2
cmds = ['time'] 

while True: 
    inp = input('::> ') 
    sinp = inp.split() 
    if str(sinp[0]) in cmds: 
     print('mkay.') 

如果名稱和輸入匹配,我能否獲得表中項目的位置?謝謝!返回表格中物品的位置。 [Py 3.4]

UPDATE:這是我更新的代碼:

cmds = ['k', '1'] 

while True: 
inp = input('>>> ') 
sinp = inp.split() 
try: 
    if str(sinp[0]) in cmds: 
     cmds.index(sinp) 
     print(sinp) 
except ValueError: 
    print('Unknown Command') 

它返回我 '未知命令' 每當我在K或 'K' 型。 1也一樣,但是'1'起作用。這是什麼原因?哦,天啊。對不起,麻煩你們,我只是sinp而不是sinp [0] .index。哎喲。

UPDATE:它不接受'1'或1,即使它在cmds表中。

+0

事實證明我錯不需要'STR()'鑄​​造。將輸入換行爲str(input('>>>'))'。然後你可以從'str(sinp [0])'中刪除它。 –

+0

@Mark Perryman - 這不需要用戶用引號來包圍輸入嗎? – iPhynx

+0

更新:仍然像以前一樣工作。我之前也從if語句中刪除了str()。正如我所說的,當我將它放在input()中時,它的工作原理完全相同。它不會接受數字,這就是爲什麼我使用原始輸入。 – iPhynx

回答

1

您可以使用you_list.index(the_item)

cmds = ['time', 'yep'] 

while True: 
    inp = input('::> ') 
    sinp = inp.split() 
    if str(sinp[0]) in cmds: 
     print('mkay.') 
     print cmds.index(inp) 

輸出:

::> time 
mkay. 
0 
::> yep 
mkay. 
1 
::> 
+0

str()給出一個錯誤消息,即輸入不能是原始的,而是以字符串形式。所以我放棄了這一點。你給我的代碼效果很好,我在'else:print('未知命令')中添加了。謝謝。 – iPhynx

1

如果cmds是「表」,那麼cmds.index爲您提供匹配字符串的位置。

1

列表的index()方法是你所需要的。

>>> cmds = ['e', 'r', 't'] 
>>> cmds.index('e') 
0 
>>> cmds.index('t') 
2 
>>> cmds.index('y') 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
ValueError: 'y' is not in list 

確保你把它放在一個try,萬一except塊中的命令是找不到的。

例如,

inp = str(input('::> ')) 
sinp = inp.split() 
print("You are trying to run command:", sinp[0]) 
try: 
    print(cmds.index(sinp[0])) 
except ValueError: 
    print("Command not recognised") 
+0

我需要顯示錯誤消息並繼續操作的代碼是什麼?是不是沿着'例外'的路線?非常感謝。 – iPhynx

+0

添加了關於異常處理的註釋。值得關注的是異常,因爲它們是比if語句更好的處理錯誤的方法。 –

+1

我剛剛在我的代碼的更新版本中進行編輯,但ValueError異常。 – iPhynx