2

そこで、Monopoly を Python で作成することにしましたが、プレイヤーの場所を更新するのに問題があります。プレイヤーを反復処理し、それぞれのサイコロを振ってから、プレイヤーの位置を更新する for ループを作成しました。問題は、ロケーション変数が最新のロケーションを保持していないことです。for ループの開始時に 0 にリセットされ続けます。これが私のコードです:

player1location = 0

def turn(numberPlayers, player, player1location, Board):
    for player in range(numberPlayers):
        player = 'Player'+str(player+1)
        print 'It\'s', player, 'turn!'
        print player1location
        rollDice = raw_input('Press Enter to roll the dice!')
        diceRoll = random.randint(1,6)
        print player, 'rolled a', diceRoll
        player1location = player1location + diceRoll
        print 'You landed on', player1location
        print '\n'

while True:
    turn(numberPlayers, player, player1location, Board)

必要に応じてさらに多くのコードを提供できますが、プレイヤーの位置を制御するのはこれだけだと思います。ありがとう!

編集:どうやら、グローバル変数ではなくローカル変数を変更しているようです。代わりにグローバル変数を変更するにはどうすればよいですか?

4

2 に答える 2

8

更新するターゲット変数と同じ名前の関数パラメーターがあります。そのため、グローバル変数ではなく、関数パラメーターに変更を加えます。これfunctionは、が関数に渡すパレメータのローカルスコープを作成するためです。そのため、同じ名前で定義された変数をグローバルに覆い隠します。

したがって、関数パラメーターplayer1locationの名前またはグローバル変数の名前を変更してください。

于 2013-02-13T16:39:15.703 に答える
1

2 つの変数が呼び出されていることに注意してください。1つは最初の行 (関数の外側) でグローバルplayer1locationに定義されています: それらは同じ名前を持っていますが、異なるスコープで定義されているため、これらは python では 2 つの異なる変数です。player1location = 0def turn(numberPlayers, player, player1location, Board)

これを修正するには、いくつかの方法があります。

関数定義から削除するplayer1locationと、グローバルスコープの変数を常に変更することになります。ただし、あなたの命名規則から、他のプレイヤーにもこの機能を再利用したいと考えていると思います (ただし、機能の仕組みを理解するために試してみても問題はありません)。

より良い方法は、関数の最後で新しいプレーヤーの場所return player1locationを返し ( )、戻り時にグローバル スコープの場所に割り当てることです ( player1location = turn(numberPlayers, player, player1location, Board))。

于 2013-02-13T16:50:47.643 に答える