2016-09-23 8 views
0

私はcompSciクラスのためにBunkoのゲームをシミュレートするプログラムを作成していますが、グローバル変数playerScoreを変更するには関数scoreCalcを取得することに問題があります。ゲームはプレイヤーにコンピュータをピットインするので、ある機能を使用してスコアを決定し、正しいスコアを増やすためのイン引数を渡すことができたかったのです。ただし、この機能では、複数のプレイにまたがってplayerScoreの値が保存されず、各ラウンドで0にリセットされます。私は機能が新しかったので、問題はおそらく何か些細なものだと確信していますが、何かすべての助けに感謝します!あなたは、パラメータとしてplayerScoreを渡すと、関数の内部で、それに対して操作を行う場合はグローバル変数を更新しない関数

dieList = [] 
sixCount = 0 
playerScore = 0 


def rollDice():  
    global sixCount 
    sixCount = 0 
    dieList.clear() 

    die1 = random.randint(1,6) 
    die2 = random.randint(1,6) 
    die3 = random.randint(1,6) 

    dieList.append(die1) 
    dieList.append(die2) 
    dieList.append(die3) 

    print(dieList) 

    for x in dieList: 
     if x == 6: 
      sixCount += 1 
    print("sixCount:", sixCount) 
    return 


def scoreCalc(x): 
    if sixCount == 1: 
     x += 1 
    elif sixCount == 2: 
     x += 5 
    elif sixCount == 3: 
     x += 21 
    return x 


print() 
print("Player's turn!") 
print('*' * 30) 
input("Press ENTER to roll the dice") 
print() 
rollDice() 
print("Score:", scoreCalc(playerScore)) 

答えて

1

あなたは明確にあなたがsixCountのためにしたグローバル変数を変更する方法を知っています。あなたはおそらくplayerScoreでそれをしていましたが、誰かのスコアを計算するのに役立つようにしようとしたときにそれを変更しました(OPの目標)。

関数を関数のように動作させるには、関数でなければなりません。それは入力を受け取り、出力を出すことを意味し、それ以外は何も意味しません。次に、その出力を使用するだけです。

def scoreCalc(sixCount): 
    x = 0 
    if sixCount == 1: 
     x += 1 
    elif sixCount == 2: 
     x += 5 
    elif sixCount == 3: 
     x += 21 
    return x 

# now use it 
playerScore += scoreCalc(sixCount) 

scoreCalcがどのようなグローバル変数も気にしないことに注意してください。それは単に入力のスコアを与えるだけです。次に、それが属する場所にそのスコアを適用します。

これらの関数も便利です。グローバル変数を与えない方が良いでしょう。彼らは重要では結果を処理し、ちょうどこれらの機能は、自分の仕事、そして他には何をやらせます。

# return a list of d6 outputs 
def rollDice(number_of_dice): 
    return [random.randint(1,6) for _ in range(number_of_dice)] 

# takes a list of d6 outputs and returns the count of sixes  
def countSixes(dieList): 
    return sum([1 for x in dieList if x==6]) 
+0

スコア修正するために、同じ機能を使用したいと思います!それはまさに私が探していたものです:) – npburns224

5

グローバル変数playerScoreに変更されることはありません。

なぜですか? Pythonの数字はimmutableです。

待って、何??はい、数値に対して操作を行い、変数に結果(たとえばi += 2)を入力すると、新しい番号オブジェクトが作成されますあなたが関数にplayerScoreを渡すときに、まったく新しいオブジェクトがを通過した、そう、何scoreCalcが取得することは、実際のplayerScoreではなく、そのコピーなっています。言うまでもなく、コピーを変更してもオリジナルは変更されません。

以下は、トリックを行います:

def scoreCalc(): 
    global playerScore 

    if sixCount == 1: 
     playerScore += 1 
    elif sixCount == 2: 
     playerScore += 5 
    elif sixCount == 3: 
     playerScore += 21 

    return playerScore 
+0

チップをありがとう!私は数字の性質を知らなかった。ありがとうあなたは目標に少し近い私を持っているが、私はまだコンピュータが – npburns224

関連する問題