2017-03-03 166 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()