2013-08-06 3 views
-1

나는 텍스트 기반 게임에서 몇 가지 통계를 얻으려고 노력해 왔습니다. 함수에서 변수를 반환하려고했지만 전역 변수에 넣을 때마다 이름 오류가 발생합니다. 나는 이것에 대해 많은 주제를 찾았지만 많이 찾지 못했다. 다음은 게임을 수정하려고 시도한 코드입니다.전역 변수의 함수에서 변수를 어떻게 사용할 수 있습니까?

def HEALTH(): 
    health =[''' 
    ===============''',''' 
    ==============''',''' 
    =============''',''' 
    ============''',''' 
    ===========''',''' 
    ==========''',''' 
    =========''',''' 
    ========''',''' 
    =======''',''' 
    ======''',''' 
    =====''',''' 
    ====''',''' 
    ===''',''' 
    ==''',''' 
    =''',''' 
    x'''] 
    return health 
health =HEALTH(health) 
print(health[0]) 
+0

무엇이'HEALTH' 호출에서 'health'라는 참조 변수가 정의되지 않았습니까? 그러나'HEALTH'는 인자가 없으므로 정의하지 않았으므로 필요 없습니다. 대신, 다음과 같이 인스턴스화 할 수 있습니다 :'health = HEALTH()'. – Justin

+0

'health'라는 전역 변수가 없으며'HEALTH'는 인수를 취하지 않습니다. – chepner

+0

인수가 필요하지 않은 함수에 인수를 전달하는 이유는 무엇입니까? –

답변

1

함수 정의에서 HEALTH은 인수가 없습니다. 따라서, 다음 줄은 실패 할 수밖에 없다 :

health =HEALTH(health) 

는 사실,이 라인은 당신이 HEALTH라는 이름의 클래스를 만들려고 많은 것 같습니다 있지만, 특히 당신이 정의하고있는 변수를 사용하기 때문에 실패하게 될거에요을 함수 health의 인수로 사용하십시오.

def HEALTH(health_level): 
    health=['''...''']] 
    return health[health_level] 

print(HEALTH(0)) 

우리는 너무 물건에 대한 더 좋은 이름이 있어야합니다

은 아마 당신이 일을하려고하는 것은 함수 정의에서 인수를 받아 들일 수 있습니다. 당신은 단순히 가능성이 혼란 방법으로 또 다시 "건강"이라는 단어를 사용하지 않을

def get_health(health_level): 
    health=['''...'''] 
    return health[health_level] 

그 방법 : 왜 다음과 같은 함수 뭔가를 호출하지.

+0

모두에게 감사드립니다. 건강에 HEALTH()를 지정할 때 논쟁을 사용하지 않고 작동하도록했습니다. 하지만 지금은 건강을 목록의 문자열과 동일하게 만들 수 있는지 물어 봅니다. 그렇다면 건강에 1을 더하면 건강으로 바뀝니다. [2] 앞으로. – pileoblock

+0

답변을 수락하고 현재 질문을 편집하거나 의견에 더 많은 질문을하는 대신 원하는 내용과 관련된 새로운 질문을해야합니다. 혼란스럽고 끝이없는 해설로 이어집니다. – erewok

+0

감사합니다. 죄송합니다. – pileoblock

0

또한 파이썬 코딩 규칙을 잘못 이해했다고 생각합니다. 일반적으로 ALL_CAPS 이름은 CONSTANTS를 위해 예약되어 있습니다 - 변경에 사용하기를 기대하지 않는 변수. 예를 들어 당신이 선발이 같은 건강에 값이있을 수 있습니다 당신이 값의 범위에 대한 건강의 그래픽 출력물의 인덱스를 유지하기 위해 노력하고 같이 귀하의 경우

HEALTH_DEFAULT = 100 

class Character(object): 
    def __init__(self): 
     self.Health = HEALTH_DEFAULT 

class BuffCharacter(Character): 
    def __init__(self): 
     self.Health = HEALTH_DEFAULT * 2 

을 것 같습니다.

HEALTH_DISPLAY = ["=" * i for i in range (10, 0, -1)] + ["X"] # easier on the eyes! 

def get_health(val): 
    return HEALTH_DISPLAY[val] 
+0

나는 range()가 2 개의 인수만을 취할 수 있다고 생각했다. + 'x'는 무엇을합니까? – pileoblock

+0

'10에서 0으로 -1 카운트 다운'은 범위 구문입니다. 다른 비트는 예제에서와 같이 배열의 끝에 "X"를 추가합니다. – theodox

관련 문제