2016-07-08 20 views
0

私は、回答を取り込んで新しいリストに追加し、新しいリストが他のリストと同じかどうかを確認するスクリプトを作ろうとしています。これらのリストが同じ場合、whileループは中断されます。whileループで2つのリストを比較する方法

:各質問は繰り返さないでください。

は、ここに私のコードだ:私はまだランダムな質問を取得しています実行

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

「同じ」という定義は何ですか?同じ_contents_を意味する場合は、セットを使用する必要があります。現在の実装では、_と_の両方の内容がテストされます。 – Delioth

+2

まあ、 'random.choice'が同じ要素を複数回返してから、それぞれを1回実行すると、2つのリストは決して同じではありません。代わりにセットを使用することもできます。 –

+1

リストは同じではないようです。 2番目のリストに2つのbsがあることに注目してください。これは、 '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 

二つのリストの長さは2つのソートリストが等しくなり、時間によって同じになりますので、このスキームの下で、ループはif文の最後なしでも終了する必要があります。

+0

これは私が欲しかったものです!私はちょうど質問が正しい場所にあったかどうかを確認することも、質問を正しく追加することもなかった。うわー、ソリューションはとてもシンプルでした!どうもありがとう! –

+0

この場合、最後にifステートメントが必要なのでしょうか? –

+0

いいえ、私は自分の答えをそのように編集しました。 –

1

ランダム質問(したがって注文)が届いていますが、[a,b,c,d]というセット注文と比較しています。あなたはより質問多くを得ることはありません保証個人ものの{ "a", "b", "c", "d" }

、私は他の1つのリストからわずかpopもの、len(questions) > 0ながらループするだろう、 - あなたの現在の実装で、セットを使用することを解決するために

一度。

+0

私はあなたのバージョンを試してみました。 –

関連する問題