2011-12-02 3 views
0

Я пытаюсь получить пользовательский ввод, а затем поместить его в список. У меня есть рабочая версия, однако я чувствую, что она избыточна (первый блок кажется лишним, хотя, если я его уберу, он не работает). Как это можно улучшить? БлагодаряВведите пользователя в список

pastChoice()

Я сделать игру, и я хочу, чтобы показать пользователю, какой выбор они уже сделали.

Ex. Тип «история», если вы хотели бы видеть предыдущий выбор

[ «а», «а», «с», «б»]

+2

Я не могу понять, что вы пытаетесь сделать с кодом, который вы дали. Можете ли вы привести пример того, чего вы пытаетесь достичь? –

+0

длина 'prevMove' всегда будет 1, вы это знаете, правильно? – juliomalegria

+0

Я знал, что это никогда не закончится, но я не знал, как это сделать. Спасибо. – Tarrant

ответ

1

Я не уверен, о своих намерениях для этого кода, но это примерно эквивалентно:

def pastChoice(): 
    prevMove = [] 

    while True: 
     choice = raw_input("> ") 
     prevMove.append(choice) 
     print prevMove 
pastChoice() 

блок:

choice = raw_input("> ") 
prevMove = [] 
prevMove.append(choice) 

запрашивает у пользователя ввод и присоединяет его к prevMove, так при запуске цикла условие i in prevMove оценивает i первому элементу в prevMove, а потому, что во втором блоке вы добавляете новые элементы в prevMove, итерация продолжается по сравнению с вновь добавленными элементами и цикл никогда не заканчивается.

Если вы удалите первый блок, но сохраните цикл for, он не будет работать, потому что внутри prevMove нет элементов, и поэтому ничего не перебирать.

+0

Спасибо, это действительно прояснилось для меня. – Tarrant

+1

+1 для хорошо продуманного примера и репетиторства –

1

вы могли бы сделать это таким образом? Я не знаю реальной причины, по которой вы пытаетесь это сделать, но чтобы принять ввод пользователя и добавить его в список, это будет хорошо.

def main(): 
    prevMove = [] 
    choice = '' 

    def getHistory(): 
      print prevMove 

    while True: 
      choice = raw_input("> ") 
      if choice == '': 
       break 
      prevMove.append(choice) 
      # do whatever you want with the input here 

      # a call to history 
      getHistory() 

if __name__ == "__main__": 
    main() 

EDIT:

Благодаря Вопросы редактировать код теперь будет записывать историю событий и иметь функцию, чтобы получить их.

+1

вы можете сказать 'while choice:' вместо 'while choice! = '':'. Таким образом, вы можете инициализировать выбор как 'choice = None' – juliomalegria

+2

@ julio.alegria как это сделать? Это просто пропустило бы цикл while. – Serdalis

+0

Вы правы в отношении состояния цикла (извините за это), но все же первый совет полезен :) – juliomalegria

Смежные вопросы