2010-10-15 4 views
2

je dois vérifier si l'entrée utilisateur est identique à un élément d'une liste, en ce moment je fais ceci:entrée utilisateur test contre une liste en python

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

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

Mais je travaille avec grandes listes et mon instruction if augmente beaucoup avec tous ces contrôles, est-il un moyen de faire référence à plusieurs index quelque chose comme:

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

ou

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

Lecture des listes docs J'ai vu qu'il est impossible de référencer plus d'un index, j'ai essayé ci-dessus et bien sûr cela envoie une erreur de syntaxe.

+1

Est-il intentionnel que vous cherchez pas 'les voitures [0]' ? Les listes sont indexées à partir de zéro, donc vos trois voitures sont 'voitures [0]', 'voitures [1]' et 'voitures [2]'. – RichieHindle

+0

J'espère vraiment que vous utilisez python 3.x ... sinon utilisez raw_input au lieu d'entrée et d'impression 'succes!', Sans crochets – Ant

+0

Ouais je suis conscient de l'index 0 dans la liste merci, Et oui, il est python 3.1 –

Répondre

8

La façon la plus simple est:

if guess in cars: 
    ... 

mais si votre liste était énorme, qui serait lent. Vous devez ensuite stocker votre liste des voitures dans un ensemble:

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

vérifier si quelque chose est présent est un ensemble est beaucoup plus rapide que de vérifier que ce soit dans une liste (mais cela ne devient un problème lorsque vous avez beaucoup de nombreux articles et que vous faites le chèque à plusieurs reprises)

(Edit:.. Je suppose que l'omission de cars[0] du code dans la question est un accident dans le cas contraire, utilisez cars[1:] au lieu de cars .)

+0

Je pense que vous avez mal compris la question. Dans le premier exemple, son code n'imprimerait pas le succès si 'guess' est' 'red '', mais votre code le ferait. – sepp2k

+0

Quelque chose à noter ici est que la construction de l'ensemble, bien qu'efficace, peut être un point de surcharge si vous ne faites que vérifier la liste une fois. – Daenyth

+0

D'autre part, peut-être que j'ai mal compris et il a simplement fait une erreur dans son code d'exemple ... – sepp2k

1

Utilisez guess in cars pour tester si guess est égal à un élément cars:

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

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

@Sean Hobbs: D'abord, vous devez attribuer une valeur à l'indice variable.

index = 0 

Vous pouvez utiliser while True pour créer la boucle infinie, de sorte que votre code serait comme ceci:

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") 
Questions connexes