2016-07-08 6 views
0

Я пытаюсь создать сценарий, который принимает ответ и добавляет его в новый список, а затем проверяет, совпадает ли новый список с другим списком. Когда эти списки совпадают, цикл while должен прерываться.Как сравнить два списка с циклом while

ПРИМЕЧАНИЕ: Каждый вопрос не должен повторяться.

Вот мой кода:

import random 

questions = ['a','b','c','d','e'] 

answered_q = [] 

while len(answered_q) < len(questions): 
    question = random.choice(questions) 
    answered_q.append(question) 
    raw_input = str(input(question + ": ")) 
    if sorted(questions) == sorted(answered_q): 
     break 

При выполнении я все еще получаю случайные вопросы, но код не перерыва когда списки имеют одинаковое содержимое.

выход:

['b','c','b,'d','d']

Если кто-то может помочь было бы здорово! Спасибо заранее!

+1

Какое у вас определение "same"? Если вы имеете в виду те же _contents_, вы должны использовать набор. Ваша текущая реализация проверяет как содержимое _and_ order. – Delioth

+2

Ну, если 'random.choice' возвращает один и тот же элемент несколько раз, прежде чем он будет один раз, то два списка никогда не будут одинаковыми. Вместо этого вы можете использовать набор. –

+1

Список похоже не совпадает. Обратите внимание, что во втором списке есть две буквы. Это потому, что иногда 'random.choice (questions)' может давать один и тот же результат более одного раза. –

ответ

1

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

while len(answered_q) < len(questions): 
    question = random.choice(questions) 
    if question not in answered_q: 
     answered_q.append(question) 
     raw_input = str(input(question + ": ")) 
     if sorted(questions) == sorted(answered_q): 
      break 

Конечно, по этой схеме, то цикл должен закончиться даже без последнего, если-заявления, потому что длина двух списков будет равна то время, когда два отсортированных списки будут равны.

+0

Это именно то, что я хотел! Я просто не проверял, был ли вопрос в нужном месте, и я не добавлял вопрос правильно. Ничего себе, решение было так просто! Большое спасибо! –

+0

Так мне даже понадобилось бы утверждение if в конце в этом случае? –

+0

Нет, и я просто отредактировал свой ответ как таковой. –

1

Во-первых, вы получаете случайные вопросы (и, следовательно, заказы), но вы сравниваете их с упорядоченным порядком [a,b,c,d].

Чтобы решить, что с вашей текущей реализации, использовать набор - { "a", "b", "c", "d" }

Хотя лично я бы просто pop вещи из одного списка в другой, в то время как перекручивание len(questions) > 0, что гарантирует вы не получите больше вопросов один раз.

+0

Я пробовал вашу версию, и она тоже работает! –

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

  • Нет связанных вопросов^_^