2011-08-14 15 views
3

私はPythonには新しく、random.choice関数に引数を渡すことに問題があります。pythonクエリ - 関数の引数が間違った型ですか?

基本的に私は 'a'リストからランダムな文字(他のリストのすべての名前)を選択し、選択した文字を生成するためにrandom.choiceに再度入力するループを作成しようとしていますランダムな文字列。

残念ながら、random.choiceの2回目の呼び出しは機能しません。新しいリストを指す代わりに、入力された文字を繰り返し続けます。任意のアイデアをどのようにこれを修正するには?私は数時間オンラインで見てきましたが、同様の問題や解決策は見つかりませんでした。どんな助けも大いにありがとう!

import random 

a = ['b','c','d'] 
b = ['a','e'] 
c = ['a','d','f'] 
d = ['a','c','e','f','g','h'] 
e = ['b','d','h'] 
f = ['c','d','g','i'] 
g = ['d','f','i'] 
h = ['d','e','g','i'] 
i = ['f','h'] 

x = 0 
answer = random.choice(f) 
print "answer is %s " % answer 

while x < 5: 
    answer2 = random.choice(answer) 
    print "answer2 is now %s " % answer2 
    x = x + 1 

答えて

4

あなたは、変数とデータを混在させ、コードをデータとして扱うという共通の初心者の罠に陥りました。通常、そのようにしようとするべきではありません。変数の名前を別の変数に入れて、そのようにアクセスしようとしないでください。代わりに

、このように、その構造にアクセスするには、あなたの変数を使用するだけで、データ構造で一緒にすべてのデータを保持し、かつ:

import random 

DATA = { 
    'a': ['b','c','d'], 
    'b': ['a','e'], 
    'c': ['a','d','f'], 
    'd': ['a','c','e','f','g','h'], 
    'e': ['b','d','h'], 
    'f': ['c','d','g','i'], 
    'g': ['d','f','i'], 
    'h': ['d','e','g','i'], 
    'i': ['f','h'], 
} 

x = 0 
answer = random.choice(DATA['f']) 
print "answer is %s " % answer 

while x < 5: 
    answer2 = random.choice(DATA[answer]) 
    print "answer2 is now %s " % answer2 
    x = x + 1 
+0

変数とデータの間にどのような違いによって参照されるリスト?変数名は辞書のエントリであり、構文的な砂糖の後ろに隠れています。 downvotingとみなされますが、あなたの方法は、たとえ過度に単純化していても、正しい方法です。 – agf

+1

2つのコードを分けて保存すると、意図しない結果を招くことなくコードを理解しやすくなり、変更が容易になります。 (すべてのプログラミングは単なる機械コードであり、文法的な砂糖の後ろに隠れているので、@declanbコードをマシンコードで直接指定することはしません:-)) – RichieHindle

+0

いいえ、 'getattr'を使う方法が分かっている状況があります。 Pythonがどのように動作するかを理解するためには、辞書キーとオブジェクト属性名の間に実際の違いがないという考え方が重要です。 – agf

0

うーん... 1つの問題は、あなたが常にANSWER2を取得しているということですあなたが他の割り当てを行っていないので、同じリストから...

-1

ただx == 'c'とします。その後random.choiceへの2回目の呼び出しは、これが唯一の「C」を含むリストから文字を選択するようなもので、実際に

answer2 = random.choice('c') 

です。これは次のように同等ではありませんです:

answer2 = random.choice(c) 

あなたは、変数cによって参照リストに、文字列'c'を変換する必要があります。

このマッピングは動作可能性があります

その後
values = { 
    "a": a, "b": b, "c": c, "d": d, "e": e, 
    "f": f, "g": g, "h", h, "i": i, "j": j, 
    } 

値[「C」]である変数c

関連する問題