인프런 커뮤니티 질문&답변

레몬 녹차 (탈퇴)님의 프로필 이미지
레몬 녹차 (탈퇴)

작성한 질문수

파이썬 무료 강의 (기본편) - 6시간 뒤면 나도 개발자

스타크래프트 프로젝트 후반전

코딩이 안되는데, 이유를 잘 모르겠습니다......

작성

·

185

0

안녕하세요, 선생님

질문이 있습니다.

제 코딩에서 처음 오류 뜨는 게 문법적 오류인데 

 else##ERROR 문법적 오류
print("{0} : 체력이 부족하여 스팀팩을 사용하지 않습니다.".format(self.name))

아무리 봐도 저기에 문법적 오류가 없어서...

제 노트북이 잘못된 건지 제가 코딩을 이상하게 했는지 여쭤보고 싶습니다...

처음에 비주얼 코드에 파이썬 프로그램을 잘못 받아서 실행이 안되더라고요...! 그래서 지금은  구글의 colab을 이용하고 있습니다...

  

#########################[ERROR]

from random import*


#일반 유닛

class Unit:

  def __init__(selfnamehpspeed):

    self.name=name

    self.hp=hp

    self.speed=speed

    print("{0} 유닛이 생성됐습니다.".format(self.name))


    def move(selflocation):

      print("{0} : {1} 방향으로 이동합니다 [속도 {2}]"\

            .format(self.name, location, self.speed))

    def damaged(selfdamage):

      print("{0} : {1} 데미지를 입었습니다.".format(self.name, damage))

      self.hp -= damage

      print("{0} : 현재 체력은 {1}입니다.".format(self.name, self.hp))

      if self.hp <= 0:

        print("{0} : 파괴되었습니다.".format(self.name))


#공격 유닛      

class AttackUnit(Unit):

  def __init__(selfnamehpspeed):

   Unit.__init__(self, name, hp, speed)

   self.damage=damage 


   def attack(selflocation):

     print("{0} : {1} 방향으로 적군을 공격합니다. [공격력 {2}]".format(self.name, location, self.damage))


#마린

class Marine(AttackUnit):

  def __init__(self):

    AttackUnit.__init__(self"마린"4015)


    def stimpack(self):

      if self.hp > 10:

        self.hp -= 10

        print("{0} : 스팀팩을 사용합니다. (HP 10 감소)".format(self.name))

        else##ERROR 문법적 오류

          print("{0} : 체력이 부족하여 스팀팩을 사용하지 않습니다.".format(self.name))


#탱크

class Tank(AttackUnit):

  seize_developed = False ##[?]  AttackUnit.__init__(~) 밑에 넣으면 안되나? 

  

  def __init__(self): 

    AttackUnit.__init__(self"탱크",150135)

    self.seize_mode = False


  def set_seize_mode(self): 

    if Tank.seize_developed == False:

      return


      # 현재 시즈모드가 아닐 때 시드모즈로 변경

      if self.seize_mode == False:

        print("{0} : 시즈모드로 변경합니다.".format(self.name))

        seize.damage*=2 

        self.seize_mode = True 

      # 현재 시즈모드일 때 시즈모드 해제

      else:

        print("{0} : 시즈모드를 해제합니다.".format(self.name))

        self.damage/=2

        self.seize_mode = False


#비행기        

class Flyable:

  def __init__(selfflying_speed):

    self.fly=flying_speed

    def fly(selfnamelocation):

      print("{0} : {1} 방향으로 날아갑니다. [속도 {2}]"\

            .format(name, location, self.flying_speed))


#공격하는 비행기

class FlyableAttackUnit(AttackUnitFlyable):

  def __init__(selfnamehpdamageflying_speed):

    AttackUnit.__init__(self, name, hp, 0, damage) 

    Flyable.__init__(self, flying_speed)

    def move(selflocation):

      print("[공중 유닛 이동]")

      self.fly(self.name, location) ##ERROR


#레이스

class Wraith(FlyableAttackUnit):

  def __init__(self):

    FlyableAttackUnit.__init__(self"레이스"80205)

    self.clocked = False


    def clocking(self): 

      if self.clocked == True:

        print("{0} : 클로킹 모드 해제합니다.".format(self.name))

        self.clocked == False

        else:

          print("{0} : 클로킹 모드로 변경합니다.".format(self.name))

          self.clocked == True


def game_start():

  print("[알림] 새로운 게임을 시작합니다.")


def game_over():

  print("Player : gg"#good game

  print("[Player] 님이 게임에서 퇴장하셨습니다")


 game_start()


 m1=Marine()

 m2=Marine()

 m3=Marine()

 t1=Tank()

 t2=Tank()

 w1=Wraith


##유닛 일괄 관리##

attack_units=[]

attack_units.append(m1)

attack_units.append(m2)

attack_units.append(m3)

attack_units.append(t1)

attack_units.append(t2)

attack_units.append(w1)


for unit in attack_units:

  unit.move("1시")


Tank.seize_developed=True

print("[알림] 탱크 시즈 모드 개발이 완료됐습니다.")


###공격 모드 준비!!###

for unit in attack_units:

  if isinstance(unit, Marine): #이 유닛은 마린 클래스의 이스인스텐스다.

    unit.stimpack()

    elif isinstance(unit, Tank):

      unit.set_seize_mode()

      elif isinstance(unit, Wraith):

        unit.clocking()

        #마린 스팀팩, 탱크 시즈모드, 레이스 클로킹


#공격은 랜덤으로 받음

for unit in attack_units:

  unit.damaged(randint(521))


game_over()        

답변 1

0

    def stimpack(self):

      if self.hp > 10:

        self.hp -= 10

        print("{0} : 스팀팩을 사용합니다. (HP 10 감소)".format(self.name))

        else##ERROR 문법적 오류

          print("{0} : 체력이 부족하여 스팀팩을 사용하지 않습니다.".format(self.name))
이런식으로 되어있습니다.
if문 줄간격이 잘못되어서 에러 났을겁니다.
    def stimpack(self):

      if self.hp > 10:

        self.hp -= 10

        print("{0} : 스팀팩을 사용합니다. (HP 10 감소)".format(self.name))

        else##ERROR 문법적 오류

          print("{0} : 체력이 부족하여 스팀팩을 사용하지 않습니다.".format(self.name))
아래 코드로 변경해서 사용하세요.
레몬 녹차 (탈퇴)님의 프로필 이미지
레몬 녹차 (탈퇴)

작성한 질문수

질문하기