2014-06-21 2 views
-7

그래서 파이썬에 익숙해지기 위해 텍스트 기반 어드벤처 게임을 코딩하려고합니다. 기본적으로, 등 건강과 공격에서 일하고 있어요 내 건강과 공격 값은나는 숫자가 서로 다른 변수를 빼는 데 도움이 필요합니다.

health=50 
squidAttack=5 
squidHealth=20 
attack=5 

그래서 나는 다음

def squidAttack(): 
global health 
global squidHealth 
global squidAttack 
health=health-squidAttack 

를 정의하지만 실행할 때 오류 얻을 수 있습니다 :

Traceback (most recent call last):          
File "C:\Users\AaronC\Documents\Python\Krados.py", line 280, in 
<module> squidAttack()    File 
"C:\Users\AaronC\Documents\Python\Krados.py", line 253, in squidAttack 
health=health-squidAttack            
TypeError: unsupported operand type(s) for -: 'int' and 'function' 

나는 강조하고 싶다; 나는 오류의 의미를 알지 못한다. 나는 많은 것을 찾았지만 아무 것도 찾을 수 없었다. 도와주세요.

+2

"서로 문자열을 잘못 사용하고 있습니다"? 네가 무엇을 요구하는지 이해하지 못한다. –

+1

@JeffreyBosboom : 나는 "minusing"(즉, 빼기)의 철자가 틀렸고 문자열을 변수와 혼동시킬 수 있다고 생각합니다. 제목을 바꿀거야. – jwodder

+1

'글로벌'을 버리고 적절한 튜토리얼을 읽으십시오. – jonrsharpe

답변

2

변수와 기능 모두에 동일한 이름 인 squidAttack이 사용됩니다. 그들 중 하나의 이름을 변경하면 잘 작동합니다.

0
squidAttack = 5 
# squidAttack is an int 

# ... Code goes here ... 

def squidAttack(): 
    # stuff goes here 

# squidAttack is a function 

squidAttack 함수를 정의하면 한 번 int로 다시 정의됩니다. 이 작업을 수행하는

훨씬 더 좋은 방법은 당신이 값 5health에서 해당 변수를 뺀하는 기능을 포함하는 변수 모두의 이름 squidAttack를 사용하는 클래스

class Actor(object): 
    def __init__(self, name, health, attack): 
     self.name = name 
     self.health = health 
     self.attack = attack 
    def attacks(other): 
     other.health -= self.attack 

me = Actor("Me", 50, 5) 
squid = Actor("Squid", 20, 5) 

squid.attacks(me) 
0

을 사용하는 것입니다. 함수가 마지막으로 오는 것이기 때문에 squidAttack의 의미를 무시하므로 health=health-squidAttack을 수행하려고하면 파이썬은 함수 정의 squidAttack을 사용하고 정수에서 함수를 뺍니다. 분명히, 이것은 작동하지 않습니다. 다른 이름을 갖도록 squidAttack 중 적어도 하나의 이름을 바꿔야합니다.

관련 문제