-3

これは私が得たものです:

x = ['a', 'b', 'c']

y = ['a', 'b', 'c']


def stuff(this, that):
  this = x[randint(0, 2)]
  that = y[randint(0, 2)]
  while this != 'c' or that != 'c'
     print "some %r stuff here etc..." % (this, that)
     this = x[randint(0, 2)]
     that = y[randint(0, 2)] 

stuff(x[randint(0, 2)], x[randint(0, 2)])

もちろん、これはプログラムの単なる「要点」です。

したがって、この部分の後まで、すべてがうまくいきます。私が抱えている問題は、成功した while ループの最終結果をグローバルに出力または使用しようとすると、明らかに NameError が発生し、関数内の変数にグローバルを追加しようとすると SyntaxError: name ' が発生することです。 blah' はグローバルかつローカルです。関数の外でランダム変数を作成すると、出力されるのはその変数であり、while-loopステートメントを満たしたものではありません。

関数に print を入れるだけでよいことがわかりましたが、これは上記の基本的な手順を繰り返す大きなプログラムの一部にすぎません。合計結果を一緒に出力したい:

print "blah blah is %r, and %r %r %r etc.. blah blah.." % (x, y, z, a, b, etc)

while ループを満たす変数を正確に収集し、プログラム全体の他の部分で使用できるようにするにはどうすればよいですか? PS: 混乱して申し訳ありません。私はまだ学習段階にあります..

4

1 に答える 1

3

ステートメントを使用returnして、呼び出し元に結果を返します。これは、変数を渡すための推奨される方法です (globalグローバル名前空間が乱雑になり、後で名前衝突の問題が発生する可能性があるため、理想的ではありません)。

def pick_random(x, y):
    return random.choice(x), random.choice(y)

this, that = pick_random(x, y)

関数から値を生成し続けたい場合は、次を使用できますyield

def pick_random(x, y):
    while True:
        this, that = random.choice(x), random.choice(y)
        if this == 'c' and that == 'c':
            return
        yield this, that

for this, that in pick_random(x, y):
    print this, that
于 2013-02-23T19:42:41.433 に答える