2016-10-21 24 views
-1

スコアを保持するロックペーパーはさみゲームを作成しようとしていますが、このプログラムを実行するとスコアが毎回リセットされます。スコアを適切に保つために何を変更する必要がありますか?ロックペーパーはさみスコアを維持する

import random 

def rockPaperScissors(): 
    playerScore = 0 
    computerScore = 0 
    print "" 
    p = raw_input("Type 'r' for rock, 'p' for paper or 's' for scissors: ") 
    choices = ['r', 'p', 's'] 
    c = random.choice(choices) 
    print "" 
    print "Your move:", p 
    print "Computer's move:", c 
    print "" 
    if p == c: 
     print "Tie" 
    elif p == 'r' and c == 's': 
     playerScore += 1 
     print "You win" 
    elif p == 'p' and c == 'r': 
     playerScore += 1 
     print "You win" 
    elif p == 's' and c == 'p': 
     playerScore += 1 
     print "You win" 
    elif c == 'r' and p == 's': 
     computerScore += 1 
     print "You lose" 
    elif c == 'p' and p == 'r': 
     computerScore += 1 
     print "You lose" 
    elif c == 's' and p == 'p': 
     computerScore += 1 
     print "You lose" 
    else: 
     print "Try again" 
    print "" 
    print "Your score:", str(playerScore)+ ", Computer score:", str(computerScore) 

while True: 
    rockPaperScissors() 
+0

スクリプトを実行するたびに実行するたびに、新しい値を割り当てる必要があります。 –

+0

私がこの課題を教えたときの示唆:整数1,2,3として選択肢をコード化します。そして、(r-c)%3は7つのif/else節なしで勝者を簡単に示します。 – Prune

答えて

2

あなたは、ループ内の関数を呼び出しています。関数が最初に行うことは、スコアのローカル変数を作成することです。関数が終了すると、そのスコアは破棄されます。それは複数の呼び出しによって持続しません。新しいスコアを返して、新しい値をカウンタに割り当てる必要があります:

import random 

def rockPaperScissors(): 
    playerScore = 0 
    computerScore = 0 
    ... 
    return playerScore, computerScore 

player = 0 
computer = 0 

while True: 
    p, c = rockPaperScissors() 
    player += p 
    computer += c 
    print "Your score:", str(player)+ ", Computer score:", computer 
+0

私はこれをグローバルよりも好きですが、累積スコアを関数に渡す必要があるので、毎回累積を出力するようにしてください(そして、スコアを一番上にリセットしないでください)。 – mitoRibo

+0

@rbierman - 良い点。関数から 'print'文を移動しました。 – TigerhawkT3

0

この機能を実行するたびに、スコアがリセットされます。関数の外でcomputerScoreとplayerScoreを定義すると、関数を複数回実行しても値が保持されます。 globalを使用して、グローバル変数を関数スコープに「インポート」します。

playerScore = 0 
computerScore = 0 

def rockPaperScissors(): 
    global playerScore 
    global computerScore 
    OTHER CODE 
+0

'global'はこれにはまったく必要なく、恐ろしい松葉杖は学ばない。 – TigerhawkT3

+0

Pythonが変数とスコープで動作する方法を示しているため、この場合に使用することをお勧めします。値を返すことは代わりになりますが、これは本当にこのような単純なプロジェクトでは不要です。 – NikxDa

+0

「グローバル」が何かを行う正しい方法であるという単一のインスタンスは見たことがありません。 – TigerhawkT3

関連する問題