我的程序非常复杂,下面我提供一个更简单的版本:
while True:#This first part asks the user if he wants to run in deterministic mode(explained later) If he does then deterministic is given a value of 1, else, it is given a value of two.
mode= input("Would you like to start the program in deterministic mode?(y/n)")
for i in mode:
if i not in ('yYnN'):
print('Please enter either a \'y\' or an \'n\', Please try again')
break
else:
break
if mode=='y' or mode== 'Y':
deterministic= 1
elif mode=='n' or mode=='N':
deterministic= 2下面是一些使用上述代码的代码。这是一条if-elif语句,其中如果确定性值为==1,则函数将运行;如果为deterministic==2,则运行不同的函数。
if deterministic==2:#position,time, and energy variables will come from the function updateDisplayAllVar(....)
position,time,energy=updateDisplayAllVar(selection,position,time,energy)
elif deterministic==1:#position,time, and energy variables will come from the function deterministic(....)
position,time,energy=deterministic(selection,position,time,energy)现在我将向您展示上述代码中的两个函数。我认为问题出在他们身上。第一个函数给出一个随机数,并且每次都可能给出一个不同的随机数。第二个函数使用.seed将随机数限制为每次相同的“随机”数。
def updateDisplayAllVar(选择,位置,时间,能量):
if selection=='w' or selection =='W':
energy= energy
position= position+1
time=time+1
elif selection=='j' or selection =='J':
energy= energy-1
position= position+2
time=time+1
elif selection=='r' or selection =='R':
energy= energy-random.randrange(1,2+1)
position= position+random.randrange(1,4+1)
time=time+1
elif selection=='f' or selection =='F':
energy= energy- random.randrange(3,5+1)
position= position+random.randrange(3,8+1)
time=time+1
def deterministicMode(selection,position,time,energy):
if selection=='w' or selection =='W':
energy= energy
position= position+1
time=time+1
elif selection=='j' or selection =='J':
energy= energy-1
position= position+2
time=time+1
elif selection=='r' or selection =='R':
random.seed(1)
energy= energy-random.randrange(1,2+1)
position= position+random.randrange(1,4+1)
time=time+1
elif selection=='f' or selection =='F':
random.seed(3)
energy= energy- random.randrange(3,5+1)
position= position+random.randrange(3,8+1)
time=time+1现在我的问题是。有了这段代码,即使我不选择确定性(无随机数)模式,我仍然可以得到非随机的、基于第二个函数的数字。也就是说,尽管上面有两个函数,并且我要求每个函数都根据用户的输入运行……运行的总是deterministicMode(selection,position,time,energy)。有没有人知道怎么解决。如果有任何不清楚的地方,请让我知道,我会修复它。
发布于 2012-11-24 06:33:33
只需用当前系统时间重新设定RNG的种子,使其再次“随机”即可:
def deterministicMode(selection,position,time,energy):
random.seed() # <-- Add this line right here
if selection=='w' or selection =='W':
energy= energy
position= position+1
time=time+https://stackoverflow.com/questions/13536240
复制相似问题