2017-03-03 14 views
1

この機能を調整するにはどうすればいいですか?複数回実行しても前の方向に戻らない場合はどうすればよいですか?たとえば、Nを生成した場合、次回はNを返しません。ランダムなアイテムをリストに生成する

import random 
def random_direct(): 
    directions=['N','S','E','W'] 
    return random.choice(directions) 

ありがとうございました!

この質問はランダムな項目を返すように求めています。

+3

可能な複製http://stackoverflow.com/questions/29805042/python-avoid-previous-value-from-random-selection-from-list –

+0

可能な複製[Python |リストから無作為に選ばれたものから以前の値を避ける](http://stackoverflow.com/questions/29805042/python-avoid-previous-value-from-random-selection-from-list) –

答えて

3
import random 

def random_direct(prev_direction=None): 
    directions = [direction for direction in ('N','S','E','W') 
          if direction != prev_direction] 
    return random.choice(directions) 
+0

ansのおかげで – James

+3

'random.choice 'ジェネレータは動作しません。ジェネレータは長さがありません。代わりにリストを使うべきです。 (今答えて固定) – avysk

+1

ああ、私の悪い。古典的な "時期尚早な最適化はすべての悪の根源です"。ありがとう@avysk! –

1

他の回答と同じように前の方向を渡すことができます。あなたができない場合は、いくつかの牛車(私ははないはそれをお勧めします)を行うことができます。

def random_direct(_prev = [None]): 
    directions = [direction for direction in ('N', 'S', 'E', 'W') 
          if direction != _prev[0]] 
    res = random.choice(directions) 
    _prev[0] = res 
    return res 

random_direct()のように、パラメータを指定せずに関数を呼び出します。

関連する問題