首先上源碼:
- from numpy import *
- import numpy as np
- import random
- def creRowData(n):
- # matrix = np.random.randint(0,10,size=[m,1])
- data_list = []
- # for i in range(m):
- numOjob = random.randint(2, 4)
- data_list.append(numOjob)
- # 工序數(shù)
- for i in range(numOjob):
- timeOJobOnM,numOMachine = extendData(n)
- data_list.append(numOMachine)
- data_list = data_list + timeOJobOnM
- return data_list
- # 'random.randint(2,4)'.join(str() for ad in range(random.randint(1,4)))
- # ”.join():作用是將引號(hào)里內(nèi)容加入到括號(hào)里元素之間,是字符串操作函數(shù)。
- '''n個(gè)機(jī)器'''
- def extendData(n):
- a = random.randint(3,n)
- select_list = range(1, n)
- X = sorted(random.sample(select_list,a)) # n是你想隨機(jī)想選出的個(gè)數(shù)
- c = 1
- str_1 = X
- str_list = list(str_1)
- for i in range(len(X)):
- # 在每個(gè)標(biāo)號(hào)后隨機(jī)花費(fèi)時(shí)間
- t = [random.randint(1, 15)]
- new_str =str_list[:c]+list(t)+str_list[c:]
- # print(new_str,str_list[:c], str_list[c:])n
- # 更新
- str_list = new_str
- c += 2
- return new_str,a
- Date = creRowData(10)
- print(Date)
然后結(jié)果是這樣報(bào)錯(cuò)的:
問(wèn)題就出在a = random.randint(3,n) ; select_list = range(1, n)這兩行上,因?yàn)閞ange(1,n)產(chǎn)生的整數(shù)列[1,2,3,,,n-1]不包含n,而上一句random.randint(3,n)意思是產(chǎn)生3--n中的一個(gè)整數(shù),而這個(gè)整數(shù)很可能是n,對(duì)于random.sample(select_list,a)意思是從列表select_list中任意選出a個(gè)數(shù),如果a=n的話(huà),明顯已經(jīng)超過(guò)了列表select_list的個(gè)數(shù)了,所以就會(huì)出現(xiàn)圖示錯(cuò)誤,當(dāng)然多運(yùn)行幾遍你會(huì)發(fā)現(xiàn)有時(shí)也能正常運(yùn)行,這就是產(chǎn)生的隨機(jī)數(shù)a不等于n的效果。
既然發(fā)現(xiàn)了錯(cuò)誤,改正也很簡(jiǎn)單了,直接select_list = range(1, n+1)即可。
聯(lián)系客服