2015-05-17 3 views
0

Я делаю текстовую RPG, и я застрял на ней, по крайней мере, на неделю. Это класс врагов, который я создал, и теперь у меня есть функция, чтобы атаковать.Почему я получаю ошибку типа операнда здесь, когда я использую%?

class enemy: 
    def __init__(self,name,level,health): 
     self.name = name 
     self.level = level 
     self.health = health 
    def attack(self): 
     print "A %r appears! It wants to fight!" % (self.name) 
     player.weapon = (raw_input("What do you attack with? >>").lower()) 
     while (player.health > 0) or (self.health > 0): 
      if (player.inventory.get(player.weapon) > 0): 
       player.health = player.health - ((randint(0,5)) + attack_multiplier(self.level)) 
       print "%r strikes! Your health is down to %r" %(self.name, player.health) 
       if (player.health > 0) and (self.health > 0): 
        if weapon_probability() == "critical hit": 
         self.health -= (((randint(0,5))) + (attack_multiplier(weapon_levels.get(player.weapon))) * 2) 
         print_slow("Critical Hit!") 
        elif weapon_probability() == "hit": 
         self.health -=((((randint(0,5))) + (attack_multiplier(weapon_levels.get(player.weapon))))) 
         print_slow("Hit!") 
        elif weapon_probability() == "miss": 
         print_slow("Miss") 
        print_slow("Enemy health down to %r !") % self.health 
       elif player.health <= 0: 
        print_slow("Your health...it's falling") 
        break 
       elif self.health <= 0: 
        print_slow("Enemy vanquished!") 
        break 
      else: 
       print "You don't have that!" 
       player.weapon = (raw_input("What do you attack with? >>").lower()) 

Это ошибка:

File "Central Program.py", line 103, in attack 

print_slow("Enemy health down to %d !") % self.health 
TypeError: unsupported operand type(s) for %: 'NoneType' and 'int' 

Спасибо за помощь, я застрял на этом так долго и ее получение действительно раздражает. Я чувствую, что решение будет простым, но я не знаю, что делать

ответ

4

Вам необходимо применить оператор % к строке, а не возвращаемого значения print_slow(). Эта функция возвращает None, а None % self.health вызывает вашу ошибку.

Изменить

print_slow("Enemy health down to %d !") % self.health 

в

print_slow("Enemy health down to %d !" % self.health) 

Обратите внимание на размещение этого закрытия ) скобкой. Ваш код применял % к неправильному объекту.

0

Поместить % self.health внутри скобках

Смежные вопросы