2017-05-12 10 views
0

私は私のdicegameのコードの一部を作り直しましたが、ややうまく動作しますが、サイコロを振ってユーザースコアを表示しようとすると、 p1_scoreは定義されていません '。変数p2_scoreについても同じことが言えます。しかし、p1_scoreをran_num + ran_numと定義したので、なぜ私はエラーが出るのか分かりません。明らかにran_numは定義されていません

import random 
import time 

player_1 = input("") 
player_2 = input("") 

def rollDice(player_1): 
     ran_num = random.randint(1,6) 
     if ran_num == 1: 
      print("You rolled a",ran_num) 
     else: 
      print("You rolled a",ran_num) 
     p1_score = ran_num+ran_num 


def rollDice(player_2): 
     ran_num = random.randint(1,6) 
     if ran_num == 1: 
      print("You rolled a",ran_num) 
     else: 
      print("You rolled a",ran_num) 
     p2_score = ran_num+ran_num 


print("Please press ENTER to roll the dice") 
input() 
rollDice(player_1) 
print("Good job",player_1,) 
print("Your score is now",p1_score) 
time.sleep(5) 
print(player_2,"Press ENTER to roll the dice") 
input() 
rollDice(player_2) 
print("Nice work",player_2) 
print("Your score is now",p2_score) 

def main(): 
    rollDice(player1, player2) 

main() 
+0

これらの変数は、関数にとってローカルです。あなたはそれを呼び出すコードに戻す必要があります。 – Carcigenicate

+0

あなたはそれが意味することを私は得られないのですか? – johnny2945

+0

'return'は何をしていますか? – Carcigenicate

答えて

4

この変数のスコープの問題は、あなたが(間違って使用した場合に危険なことがグローバル)グローバルを使用するためにあなたがplayer_1とplayer_2を持っているのと同じ方法を必要とする、またはその関数から戻ると返された値を使用するかであります出力のために。

http://python-textbok.readthedocs.io/en/1.0/Variables_and_Scope.html

import random 
import time 

def rollDice(): 
    ran_num = random.randint(1,6) 
    print("You rolled a " + str(ran_num)) 
    raw_input() 
    resolved_score = ran_num+ran_num 
    return str(resolved_score) 

player_1 = raw_input("Enter player one name: ") 
player_2 = raw_input("Enter player two name: ") 

print("Please press ENTER to roll the dice") 
raw_input() 
p1_result = rollDice() 

print("Good job "+player_1) 
print("Your score is now "+p1_result) 
time.sleep(5) 

print(player_2+" Press ENTER to roll the dice") 
raw_input() 
p2_result = rollDice() 

print("Nice work "+player_2) 
print("Your score is now "+p2_result) 

を私はあなたを合理化しました「ちょうどそうあなたが理解することができ、私はあなたが読むためのリソースを見つけることができるかどうかを確認するために簡単にGoogleをした、そのウェブサイトと提携していません」いくつかの論理エラーがありました。 defにはreturn文があり、return文は2つの数値を加算し、str()を使って文字列に変換し、RETURNを使用して呼び出し元のコードに値を戻します。この場合、私たちが見るところ、呼び出し元のコードが最初に遭遇した:

p1_result = rollDice() 

今p1_resultはran_num + ran_numは、関数内に解決何でも等しくなります。

+1

**しかし、代替案が本当に乱雑でない限り、グローバルは好きではありません。可能であれば返却をお勧めします – Carcigenicate

+0

合意して、彼は実際には "復帰"の声明が何であるか混乱しているようですので、私は彼のための例を書く必要があるかもしれません。 –

+0

あなたが私に偉大な例を与えることができたら: – johnny2945

関連する問題