私のプログラムは非常に複雑です。以下の簡単なバージョンを提供しています。
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
以下は、上記のコードを使用するコードです。これは、deterministic が ==1 の場合に関数が実行され、deterministic==2 の場合に別の関数が実行される if-elif ステートメントです。
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)
ここで、上記のコードの 2 つの関数を示します。問題は彼らにあると私は信じています。最初の関数は乱数を与え、毎回異なる乱数を与える可能性があります。2 番目の関数は、.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
今私の問題は...このコードでは、決定論的(乱数なし)モードを選択しなくても、ランダムではなく、2番目の関数に基づいた数値が得られることです。つまり、そこには 2 つの関数があり、ユーザーの入力に基づいて各関数を実行するように要求していますが、常にdeterministicMode(selection,position,time,energy)
実行されます。誰かが修正を知っていますか。不明な点があればお知らせください。修正します。