2017-05-12 3 views
0

그래서 저는 주사위 게임의 코드를 다시 만들었습니다. 그 코드는 다소 깔끔하게 작동합니다. 그러나 주사위를 굴린 다음 사용자 점수를 표시하려고 시도한 후에 나는 'name 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와 함께이 같은 방법이 필요합니다, 또는 그 함수에서 반환하고 반환 된 값을 사용 중입니다 출력합니다. 내가 합리화 한

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) 

를 "당신이 이해할 수있는 웹 사이트와 제휴하지, 그냥 내가 리소스를 찾을 수 있다면 그렇게 읽을 볼 수있는 빠른 구글 않았다"

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

이 당신의 약간의 코드, 약간의 논리 오류가있었습니다. def 문에 return 문이 있음을 주목하십시오. return 문은 두 개의 숫자를 함께 더하고 str()을 사용하여 문자열로 변환 한 다음 RETURN을 사용하여 값을 호출 코드에 다시 저장합니다.

p1_result = rollDice() 

지금 p1_result 함수 내부에 해결에 상관없이 ran_num + ran_num 동일합니다 :이 경우 호출 코드는 먼저 우리가 볼 경우 발생합니다.

+1

** 그러나 대안이 정말로 지저분하지 않다면 절대 전역을 선호하지 않습니다. 가능하면 언제든지 반환하는 것이 좋습니다. – Carcigenicate

+0

동의, 그는 "반환"진술이 실제로 무엇인지에 관해 혼란스러워 보입니다. 그래서 나는 그를 위해 모범을보아야 할 것입니다. –

+0

당신이 나에게 위대한 예를 들어 줄 수 있다면 :) – johnny2945

관련 문제