不同洗牌的程度,我用兩個建築方案,可視化編程插件(螞蚱犀牛和迪納摩的Revit中 - 對於那些知道/有興趣)使用隨機模塊蟒蛇
蟈蟈包含一個名爲「抖動功能'這將洗刷一個列表,但是它有一個從0.0到1.0的輸入來控制洗牌的程度--0.0導致沒有洗牌1.0會產生一個完整的洗牌。
第二個程序(Dynamo)不包含此功能。它包含一個shuffle模塊(它包含一個種子值),但它是一個完整的隨機洗牌。
最終的目標是要生產出一系列固體和玻璃面板的,但以產生輕微的隨機效應(但避免大結塊固體和釉面元件 - 因此我想「光洗牌」)
我已經編寫了一個代碼,用於計算所需的玻璃(真)值和實值(假)值的數量,然後根據項目數量和指定的百分比均勻分配True和False值。
我已經簽出了隨機模塊參考,但我不熟悉所述的各種分佈。
如果現有的功能可以實現這一點,有人可以幫助或指出我的方向是正確的。
(我已經加入對錯交替,以彌補列表中的項目的正確數量略有被騙 - 項目list3是最終名單,列表2包含真正falses的重複模塊)
非常感謝
import math
import random
percent = 30
items = 42
def remainder():
remain = items % len(list2)
list3.append(True)
remain -= 1
while remain > 0 :
list3.append(False)
remain -= 1
return list3
#find module of repeating True and False values
list1 = ([True] + [False] * int((100/percent)-1))
#multiply this list to nearest multiple based on len(items)
list2 = list1 * int(items/(100/percent))
# make a copy of list2
list3 = list2[:]
#add alternating true and false to match len(list3) to len(items)
remainder()
#an example of a completely shuffled list - which is not desired
shuffled = random.sample(list3, k = len(list3))
Python的隨機模塊有一個'shuffle'方法,所以實現一個完整的shuffle作爲一個樣本是毫無意義的。就「抖動」而言 - 或許與其鄰居進行隨機交換一定次數,這將導致原始順序擴散。 –