2014-02-25 95 views
3

我期待生成隨機長度和方括號例如圖案, []] [[]] [[] [[]] []Python中,生成括號

我迄今爲止的隨機串設法讓我的程序隨機產生括號,但隨機產生它們的次數,所以目前我的程序給我的結果如,

[] [] [] [] [] []

[] [] []

[] [] [] [] []

所以括號內沒有隨機性,只顯示括號中的隨機性。

我想知道如何將括號隨機ASWELL的順序作爲展示中括號的數量。

這裏是我的代碼,到目前爲止,

import random 
import string 

def randomGen(N): 
    return random.randint(1,N) 

char1 = '[' 
char2 = ']' 
finalist = [] 
newList = [] 
newList2 = [] 

newValue = randomGen(99) 

for i in range(newValue): 
    newList = char1 
    newList2 = char2 
    finalist.append(newList + newList2) 

for everChar in finalist: 
    print everChar, 

感謝。

回答

4

您可以使用random.sample來選擇放置位置的索引,例如左括號。然後在其他地方放置右括號:

In [119]: import random 

In [122]: N = 10 

In [125]: idx = set(random.sample(range(N), N//2)) 

In [126]: idx 
Out[126]: {0, 1, 4, 5, 7} 

In [127]: ''.join(['[' if i in idx else ']' for i in range(N)]) 
Out[127]: '[[]][[][]]' 

給出你的例子,我假設你想要相同數量的左右括號。如果沒有,請使用jonrsharpe的解決方案。

4

您需要從兩個字符中隨機選擇;你可以做到這一切在同一行:

finallist = [random.choice('[]') for _ in range(random.randint(1, 99))] 

您還可以簡化輸出:

print " ".join(finallist) 

一個例子,我只是跑:

[ ] ] [ [ [ ] [ ] ] [ 
+4

'random.choice('[]')'會做得很好,而且看起來對我更具可讀性。 – lanzz

+0

@lanzz好點,我會相應地編輯。 – jonrsharpe

+0

我希望在範圍內使用'「」.join(random.choice('[]')(random.randint(1,99)))':) – thefourtheye

1
import random 
import string 

def randomGen(N): 
    return random.randint(1,N) 

length_to_generate = randomGen(99) 
finalist = [] 
for i in range(length_to_generate): 
    if random.randint(0, 1): 
     finalist.append("[") 
    else: 
     finalist.append("]") 

for everChar in finalist: 
    print everChar, 

您還可以生成一個字符串而不是一個列表:

length_to_generate = randomGen(99) 
finalist = "" 
for i in range(length_to_generate): 
    if random.randint(0, 1): 
     finalist += "]" 
    else: 
     finalist += "[" 

print finalist 
+0

我已經設法讓我的朋友在使用幫助下工作,但是我也在尋找我的程序來告訴用戶結果是平衡的還是不平衡的。我的意思是[] [] [](平衡)和[] [[[] [](不平衡)。任何想法我會如何去實現這個? – Baileyavfc

4

好吧,如果你只是想解決您的代碼,你可以簡單地做

finalist = list("".join(finalist)) 
random.shuffle(finalist) 
for everChar in finalist: 
    ... 

如果你想有效的,更好的方法,請看看其他的答案。