# (Solved) : Use Python Please Want Way Make Monsters Fight Two Monsters Fight Need Give Two New Class Q42675905 . . .

Now we want a way to make our monsters fight!

Before two monsters can fight, we need to give two new classmethods that update their stats.

Implement a method for “win_fight” and “lose_fight”. Win_fightshould add 5 to the monster’s self.exp, and reset their current_hpto their max_hp. Lose_fight should also reset their hp, but onlyadds 1 exp to self.exp.

Now write a function that takes two instances of the Monsterclass as its input and makes them “fight”. A fight goes asfollows:

1. The monster entered as the first function parameter always goesfirst.
2. Each monster takes a turn using one attack move.
3. Loop over all attacks from most powerful to least powerfulattack until there is a winner. If there is a tie in hit points foran attack select using alphabetical order.

An attack is always successful and decreases the opponent’scurrent_hp by the given number of points. Monsters continue takingturns until one of them reaches current_hp less than or equal to 0,at which point the win_fight and lose_fight methods should beinvoked. Once the fight is complete, return the round number inwhich the fight ended, the monster that won and the list of attacksthe winning monster used. If both monsters only have “wait” as anattack, return -1, None, None

Sample Input 1:

a = Monster(“a”, 9)b = Monster(“b”, 9)a.add_attack(“ice_storm”)b.add_attack(“ice_storm”)b.remove_attack(“wait”)a.remove_attack(“wait”)round1, winner, moves = monster_fight(a, b)print(round1)print(winner.name)print(moves)

Sample Output 1:

3a[‘ice_storm’, ‘ice_storm’, ‘ice_storm’]

Sample Input 2:

a = Monster(“a”, 6)b = Monster(“b”, 2)round1, winner, moves = monster_fight(a, b)print(round1)print(winner)print(moves)print(a.exp)

Sample Output 2:

-1NoneNone0

Sample Input 3:

Sample Output 3:

45[‘fire_storm’, ‘whirlwind’, ‘wait’, ‘fire_storm’]1

Sample Input 4:

Sample Output 4:

4b[‘ice_storm’, ‘whirlwind’, ‘wait’, ‘ice_storm’]

Sample Input 5:

Sample Output 5:

3b[‘double_hit’, ‘double_hit’, ‘double_hit’]

Sample Input 6:

Sample Output 6:

5a[‘ice_storm’, ‘whirlwind’, ‘wait’, ‘ice_storm’, ‘whirlwind’]

Sample Input 7:

Sample Output 7:

51111

#code I have

class Monster():
def __init__(self, name, hp=20):
self.exp = 0
self.attacks = {‘wait’: 0}
self.name = name
self.known_attacks = {‘sneak_attack’: 1, ‘slash’: 2, ‘ice_storm’:3, ‘fire_storm’: 3,
‘whirlwind’: 3, ‘earthquake’: 2, ‘double_hit’: 4, ‘wait’: 0}
self.current_hp = hp
self.max_hp = hp
self.type = ‘normal’

if attack_name in self.known_attacks and attack_name not inself.attacks:
try:
assert(len(self.attacks) < 4)
self.attacks[attack_name] =self.known_attacks.get(attack_name)
return True
except:
#find the min value of self.attacks
minval = min(self.attacks.keys(), key=(lambda k:self.attacks[k]))
for keys, values in self.attacks.items():
if self.attacks[minval] == values and min(minval, keys) ==keys:
minval = keys
del self.attacks[minval]
self.attacks[attack_name] =self.known_attacks.get(attack_name)
return True
else:
return False

def remove_attack(self, attack_name):
if attack_name in self.attacks.keys():
del self.attacks[attack_name]
if len(self.attacks) == 0:
self.attacks[‘wait’] = 0
return True
else:
return False
def win_fight(self):
self.exp += 5
self.current_hp = self.max_hp
def lose_fight(self):
self.exp += 1
self.current_hp = self.max_hp

def monster_fight(monster1, monster2):

M1round = 0
M2round = 0
monster2attackLis = []
monster1attackLis = []
winner = None
round = 0

for values in monster2.attacks.values():
monster2attackLis.append(values)
for values in monster1.attacks.values():
monster1attackLis.append(values)

monster2attackLis = sorted(monster2attackLis,reverse=True)
monster1attackLis = sorted(monster1attackLis, reverse=True)

M1attacknames = sorted(monster1.attacks.items(),key=operator.itemgetter(1), reverse=True)
M2attacknames = sorted(monster2.attacks.items(),key=operator.itemgetter(1), reverse=True)

winnerList = [] #list of the winners moves

index1 = 0
index2 = 0

if all(key == ‘wait’ for key in monster1.attacks.keys()) andall(key == ‘wait’ for key in monster1.attacks.keys()):
return (-1, None, None)

while(monster2.current_hp > 0):

try:
monster2.current_hp -= monster1attackLis[index1]
index1 += 1
M1round += 1

except IndexError:

index1 = 0

while(monster1.current_hp > 0):

try:
monster1.current_hp -= monster2attackLis[index2]
index2 += 1
M2round += 1

except IndexError:

index2 = 0

if(M1round == M2round):
winner = monster1
round = M1round
monster1.win_fight()
monster2.lose_fight()
index = 0
i = 0
while i < M1round:
try:
winnerList.append(M1attacknames[index][0])
index += 1
i+=1
except:
index = 0
continue

elif(M1round < M2round):
winner = monster1
monster1.win_fight()
monster2.lose_fight()
round = M1round
index = 0
i = 0
while i < round:
try:
winnerList.append(M1attacknames[index][0])
index += 1
i+=1
except:
index = 0
continue

elif(M2round < M1round):
winner = monster2
monster2.win_fight()
monster1.lose_fight()
round = M2round
index = 0
i = 0
while i < M2round:
try:
winnerList.append(M2attacknames[index][0])
index += 1
i += 1
except:
index = 0
continue

return (round, winner, winnerList)

How to fix this problem? Thank You

Traceback (most recent call last): File “jailed_code”, line 151, in <module> exec(x) File “<string>”, line 1, in <module> NameError: name ‘monster_fight’ is not defined Show transcribed image text Traceback (most recent call last): File “jailed_code”, line 151, in exec(x) File “”, line 1, in NameError: name ‘monster_fight’ is not defined

Answer to Use Python Please: Now we want a way to make our monsters fight! Before two monsters can fight, we need to give two new …

We are the best freelance writing portal. Looking for online writing, editing or proofreading jobs? We have plenty of writing assignments to handle.