2010-10-15 60 views
2

我需要測試,如果用戶輸入相同的列表的一個元素,測試用戶輸入,現在我這樣做:對Python的list

cars = ("red", "yellow", "blue") 
guess = str(input()) 

if guess == cars[1] or guess == cars[2]: 
     print("success!") 

但我的工作更大的名單和我的if語句增長了不少與所有這些檢查,是否有引用多個索引類似的方式:

if guess == cars[1] or cars[2] 

if guess == cars[1,2,3] 

閱讀列表文檔,我發現不可能引用多個索引,我上面嘗試過,當然會發送語法錯誤。

+1

是不是故意的,你不是在看'車[0]' ?列表從零開始索引,所以你的三輛車是'汽車[0]'''汽車[1]'和'汽車[2]'。 – RichieHindle 2010-10-15 17:45:33

+0

我真的希望你使用Python 3.x ...否則使用raw_input而不是輸入和打印'succes!',沒有括號 – Ant 2010-10-15 17:53:35

+0

是的我知道列表中的0索引謝謝,是的它是Python 3.1 – 2010-10-15 18:01:30

回答

8

最簡單的方法是:

if guess in cars: 
    ... 

但如果你的列表是巨大的,這將是緩慢的。然後,您應該存儲在一組你的汽車的列表:

cars_set = set(cars) 
.... 
if guess in cars_set: 
    ... 

檢查東西是否存在是一套比檢查它是否是列表中的更快(但是當你有很多很多的項目這僅僅成爲一個問題和你正在做的檢查幾次)

(編輯:。我假設的cars[0]從問題的代碼遺漏是一個意外。如果不是這樣,那麼使用cars[1:]代替cars

+0

我想你誤解了這個問題。在第一個例子中,如果'guess'是'「red」',他的代碼不會打印成功,但是你的代碼會。 – sepp2k 2010-10-15 17:43:50

+0

這裏需要注意的一點是,如果您只查看一次列表,則設置構造雖然高效,但可能會成爲一個開銷點。 – Daenyth 2010-10-15 17:44:38

+0

另一方面,也許我誤解了,他只是在他的示例代碼中犯了一個錯誤... – sepp2k 2010-10-15 17:44:58

1

使用guess in cars來測試是否guess是在cars等於一個元素:

cars = ("red","yellow","blue") 
guess = str(input()) 

if guess in cars: 
     print ("success!") 
0

@肖恩霍布斯: 首先,你必須指定一個值到變量索引。

index = 0 

您可能需要使用而真正創造了無限循環,使你的代碼會是這樣的:

while True: 

    champ = input("Guess a champion: ") 
    champ = str(champ) 

    found_champ = False 
    for i in listC: 
     if champ == i: 
      found_champ = True 

    if found_champ: 
     print("Correct") 
    else: 
     print("Incorrect")