Моя программа очень сложная, ниже я привожу более простую версию:
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, будет запущена функция, а если детерминированный == 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)
. Кто-нибудь знает исправление. Пожалуйста, дайте мне знать, если что-то неясно, и я это исправлю.
random.seed()
(без каких-либо аргументов), чтобы снова сбросить RNG, чтобы он был случайным. - person Blender   schedule 24.11.2012deterministicMode
. - person Blender   schedule 24.11.2012.seed()
(без аргументов) задает ГСЧ текущим системным временем, что снова делает его случайным. Если вы этого не сделаете, ваш ГСЧ будет продолжать использовать начальное значение3
или1
. Просто вставьтеrandom.seed()
сразу послеdef deterministicMode(selection,position,time,energy):
и посмотрите, поможет ли это. - person Blender   schedule 24.11.2012