Question: python please i do not know 3 rounds expected by my function returned 1 rounds and 4 rounds expected by my function returned 1 rounds.
python please
i do not know 3 rounds expected by my function returned 1 rounds and 4 rounds expected by my function returned 1 rounds. why i always returned only 1 rounds.
class Monster():
def __init__(self, name, hp=20):
self.name = name
self.type = "Normal"
self.max_hp = hp
self.current_hp = hp
self.attacks = {'wait': 0}
self.exp = 0
self.possible_attacks = {'sneak_attack': 1, 'slash': 2, 'ice_storm': 3, 'fire_storm': 3, 'whirlwind': 3,
'earthquake': 2, 'double_hit': 4, 'tornado': 4, 'wait': 0 }
def add_attack(self, attack_name):
if ((attack_name in self.possible_attacks) and (attack_name not in self.attacks)):
if(len(self.attacks)
self.attacks[attack_name] = self.possible_attacks[attack_name]
return True
else:
weak_attack = min(self.attacks.values())
weak_list = []
for attack in self.attacks:
if self.attacks[attack] == weak_attack:
weak_list.append(attack)
weak_list.sort()
del self.attacks[weak_list[0]]
self.attacks[attack_name] = self.possible_attacks[attack_name]
return True
else:
return False
def remove_attack(self, attack_name):
if((attack_name in self.possible_attacks) and (attack_name in self.attacks)):
del self.attacks[attack_name]
if len(self.attacks) == 0:
self.add_attack('wait')
return True
else:
return False
def win_fight(self):
self.exp = self.exp + 5
self.current_hp = self.max_hp
def lose_fight(self):
self.exp = self.exp + 1
self.current_hp = self.max_hp
def monster_fight(monster1, monster2):
monster1_attacks=[]
monster2_attacks=[]
for i in monster1.possible_attacks:
monster1_attacks.append([i,monster1.possible_attacks[i]])
for j in monster2.possible_attacks:
monster2_attacks.append([j,monster2.possible_attacks[j]])
monster1_attacks.sort(key=lambda x: x[1],reverse=True)
monster2_attacks.sort(key=lambda x: x[1],reverse=True)
round_number = 0
used_attack1 = []
used_attack2 = []
if len(monster1.attacks) == len(monster2.attacks) == 1:
if 'wait' in monster1.attacks and 'wait' in monster2.attacks:
return -1, None, None
if monster2.current_hp > 0 and monster1.current_hp > 0:
attack1 = monster1_attacks.pop(0)
monster2.current_hp -= attack1[1]
used_attack1.append(attack1[0])
attack2= monster2_attacks.pop(0)
monster1.current_hp -= attack2[1]
used_attack2.append(attack2[0])
round_number += 1
winner = None
if monster1.current_hp > 0:
monster1.win_fight()
monster2.lose_fight()
return round_number, monster1.name, used_attack1
else:
monster2.win_fight()
monster1.lose_fight()
return round_number, monster2.name, used_attack2
Step by Step Solution
There are 3 Steps involved in it
1 Expert Approved Answer
Step: 1 Unlock
Question Has Been Solved by an Expert!
Get step-by-step solutions from verified subject matter experts
Step: 2 Unlock
Step: 3 Unlock
