0

私のプログラムは非常に複雑です。以下の簡単なバージョンを提供しています。

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)実行されます。誰かが修正を知っていますか。不明な点があればお知らせください。修正します。

4

1 に答える 1

1

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+
于 2012-11-23T22:33:33.073 に答える