2013-05-28 1 views
0

Вот что у меня есть на данный момент:Как проверить raw_input на список строк?

def checkPlayerCardInput(answer): 
    while True: 
     for x in range(len(player1Cards)): 
      if answer.lower() == player1Cards[x]: 
       return player1[x] 

То, что я не знаю, как повторить цикл, если пользователь misspells слово или вводит что-то неправильное полностью?

В этом случае player1Cards равен списку из 5 строк. Я просто пытаюсь сопоставить answer (который вводится ранее пользователем через raw_input) в одну из этих строк и return, которые отвечают (что в данном случае является элементом из списка player1, который содержит остальную часть данных для возврата «карты»).

Если ответ неверный, я хотел бы, чтобы цикл начинался со свежего сигнала raw_input от пользователя.

+0

Почему у вас есть две различные структуры с данными, '' player1' и player1Cards'? Если вы объясните, что вы пытаетесь сделать, мы сможем помочь вам в структурах данных. – kirelagin

+0

Player1 содержит списки для каждой карты в «руке». player1Cards был списком строк, соответствующих «именам» карты из каждой руки. Теперь я понимаю, что я не очень хорошо структурировал свои списки, но я использовал эту программу в качестве упражнения, чтобы перейти от простых онлайн-руководств к фактическому созданию чего-то, что работает. – bhamhawker

ответ

0

Это делает то, что вы хотите?

def checkPlayerCardInput(answer): 
    while True: 
     for x in range(len(player1Cards)): 
      if answer.lower() == player1Cards[x]: 
       return player1[x] 
     answer = raw_input('incorrect answer!') 
+0

Да. На самом деле это работает отлично. Я не понимал, что могу переназначить переменную 'answer', не вызывая ошибки в цикле. Я соглашусь с этим, когда истечет срок. – bhamhawker

4

Чтобы проверить, что элемент содержится в списке, используйте оператор in. Как это:

if answer.lower() in player1CArds: 
    #... 

Используйте while петлю, чтобы просить raw_input, пока вы дали строку, найденную в списке.

0

Ключевое слово else может использоваться в вашем случае. Используется в conjonction с for, положение еще выполняется, когда диапазон был исчерпан без выхода из цикла (перерыв или возвращение):

for x in range(len(player1Cards)): 
     if answer.lower() == player1Cards[x]: 
      return player1[x] 
else: 
    # Here, your user input matches nothing. 

Однако, вы можете использовать in ключевое слово list:

if answer.lower() in player1Cards: 
    # equivalent to your for loop 

Или наоборот, not in:

if answer.lower() not in player1Cards: 
    # Typo, or the user inputed a non-existing card 
Смежные вопросы