这是我的代码的一部分:
def generateInstruction(Seed, Probability):
random.seed(Seed)
random.seed()
NumberOfAddresses = random.randint(10, 40)
ListOfAdresses = list()
Operations = [1,0]
Probabilities = [Probability, 1-Probability]
Var = random.randint(0, NumberOfAddresses)
if Var not in ListOfAdresses:
Op=0
Instruction = str(Op) + "\t" + str(Var )+ "\n"
ListOfAdresses.append(Var)
else:
Op = numpy.random.choice(Operations, 1, True, Probabilities)
Instruction = str(Op) + "\t" + str(Var )+ "\n"
return Instruction
此函数旨在生成由两部分组成的指令:操作op
和变量var
,如果变量是首次出现,则该操作必须等于 0 。否则,根据我通过命令行的可能性,它可以是 0 或 1 。
稍后,我主要循环调用此函数,并将变量保存在列表listOfAdresses
中以进行验证。问题出在输出中,尽管某些变量不止一次出现,但我的序列全都是0运算,这使我质疑函数的 else 部分,但我看不出问题出在哪里。有何评论?
这是我称之为的代码:
def main():
random.seed(2)
K = random.randint(200, 2000)
print(K)
P=list()
if (len(sys.argv) > 2) :
for i in range(2, len(sys.argv)):
P.append(float(sys.argv[i]))
f= open('Trace.txt' , 'w+')
Seed = float(sys.argv[1])
for j in range(0 , len(sys.argv)-2) :
Probability = P[j]# there something with this index
for Iteration in range(K*j, K*(j+1)):
Instr = generateInstruction(Seed, Probability)
f.write(Instr)
#f.close()
else:
print('Params Error')
该序列被划分为多个段,每个段作为输入具有不同的概率。所有概率都在命令行中传递。
答案 0 :(得分:0)
您的代码的else
分支永远不会执行。这是因为您没有维护ListOfAdresses
中先前值的任何记录。相反,每次调用该函数时,您都会将ListOfAdresses
重新初始化为一个空列表。
这意味着:
if Var not in ListOfAdresses:
始终为True
,因此,您实际上从未致电numpy.random.choice()