Ejercicio Soldados
"""
Ejercicio con clases y objetos que
enfrenta dos batallones con distintos (random)
atributos de ataque y defensa y calcula el
vencedor
"""
import random as R
class Soldado(object):
def __init__(self, color, potAt, potEs):
self.color = color
self.potAt = potAt
self.potEs = potEs
self.vida = 100
def atacar(self):
at = R.randint(0, 100)
de = R.randint(0, 100)
print(self.color, " at ", at, " de ", de)
return [at, de]
def restarVida(self, cant):
if cant > 0:
self.vida -= cant
def estaMuerto(self):
x = self.vida
if x < 0:
print("Muerto: ", self.color)
return True
return False
class Guerra(object):
def __init__(self, cantMaxSold, colorBando1, colorBando2):
self.bando1 = []
self.bando2 = []
self.bando1 = self.llenarConSoldados(colorBando1, cantMaxSold)
self.bando2 = self.llenarConSoldados(colorBando2, cantMaxSold)
def llenarConSoldados(self, color, cantMaxSold):
lista = []
cantidad = R.randint(1, cantMaxSold)
for x in range(cantidad):
at = R.randint(1, 100)
de = R.randint(1, 100)
lista.append(Soldado(color, at, de))
return lista
def luchar(self):
cant = max(len(self.bando1), len(self.bando2))
print("LUCHARAN: ", cant)
while cant > 0 and self.haySoldados():
rb1 = R.randint(0, len(self.bando1)-1)
rb2 = R.randint(0, len(self.bando2)-1)
res1 = self.bando1[rb1].atacar()
res2 = self.bando2[rb2].atacar()
self.bando1[rb1].restarVida(res2[0]-res1[1])
self.bando2[rb2].restarVida(res1[0]-res2[1])
if self.bando1[rb1].estaMuerto():
s = self.bando1[rb1]
self.bando1.remove(s)
if self.bando2[rb2].estaMuerto():
s = self.bando2[rb2]
self.bando2.remove(s)
print("resultado")
t1 = len(self.bando1)
if t1 > 0:
print(self.bando1[0].color, " soldados: ", t1)
t2 = len(self.bando2)
if t2 > 0:
print(self.bando2[0].color, " soldados: ", t2)
def haySoldados(self):
return len(self.bando1) > 0 and len(self.bando2) > 0
def main():
g = Guerra(25, "china", "eeuu")
g.luchar()
main()
Resultado
>>> %Run soldados.py
LUCHARAN: 18
china at 82 de 42
eeuu at 12 de 44
china at 81 de 30
eeuu at 55 de 22
china at 51 de 31
eeuu at 11 de 56
china at 69 de 3
eeuu at 72 de 67
china at 9 de 45
eeuu at 32 de 68
china at 43 de 48
eeuu at 86 de 7
china at 36 de 91
eeuu at 68 de 45
china at 42 de 70
eeuu at 84 de 100
china at 53 de 48
eeuu at 84 de 15
china at 73 de 52
eeuu at 65 de 37
china at 85 de 68
eeuu at 26 de 27
china at 36 de 48
eeuu at 53 de 78
china at 20 de 88
eeuu at 32 de 15
china at 15 de 51
eeuu at 38 de 97
china at 71 de 43
eeuu at 80 de 68
china at 22 de 50
eeuu at 100 de 64
china at 92 de 57
eeuu at 17 de 12
Muerto: eeuu
china at 49 de 93
eeuu at 45 de 98
china at 12 de 7
eeuu at 13 de 56
china at 39 de 41
eeuu at 96 de 79
china at 11 de 94
eeuu at 84 de 84
china at 75 de 35
eeuu at 4 de 67
china at 66 de 5
eeuu at 52 de 39
china at 75 de 57
eeuu at 97 de 85
Muerto: china
china at 59 de 61
eeuu at 96 de 35
china at 100 de 1
eeuu at 75 de 23
Muerto: china
Muerto: eeuu
china at 22 de 71
eeuu at 2 de 97
china at 79 de 13
eeuu at 88 de 73
Muerto: china
china at 85 de 81
eeuu at 62 de 14
china at 28 de 74
eeuu at 4 de 65
china at 16 de 9
eeuu at 85 de 71
china at 18 de 46
eeuu at 59 de 69
china at 80 de 81
eeuu at 82 de 22
china at 99 de 7
eeuu at 74 de 97
Muerto: china
china at 27 de 63
eeuu at 75 de 100
china at 38 de 25
eeuu at 6 de 65
china at 99 de 93
eeuu at 38 de 24
Muerto: eeuu
china at 14 de 44
eeuu at 43 de 8
Muerto: eeuu
china at 26 de 24
eeuu at 29 de 36
china at 63 de 75
eeuu at 39 de 85
china at 18 de 88
eeuu at 53 de 17
china at 54 de 50
eeuu at 46 de 90
china at 63 de 91
eeuu at 72 de 86
china at 39 de 18
eeuu at 21 de 70
china at 46 de 52
eeuu at 64 de 33
china at 71 de 1
eeuu at 38 de 35
china at 74 de 79
eeuu at 79 de 47
Muerto: eeuu
china at 55 de 31
eeuu at 3 de 6
Muerto: eeuu
china at 31 de 34
eeuu at 82 de 34
china at 46 de 52
eeuu at 43 de 77
china at 61 de 95
eeuu at 18 de 81
china at 77 de 70
eeuu at 24 de 30
china at 49 de 46
eeuu at 87 de 53
Muerto: china
china at 82 de 89
eeuu at 18 de 71
china at 7 de 65
eeuu at 41 de 58
china at 26 de 50
eeuu at 1 de 80
china at 36 de 81
eeuu at 60 de 37
china at 87 de 39
eeuu at 60 de 28
Muerto: eeuu
china at 65 de 75
eeuu at 85 de 32
china at 80 de 6
eeuu at 52 de 97
Muerto: china
china at 15 de 95
eeuu at 5 de 86
china at 39 de 19
eeuu at 63 de 51
china at 58 de 10
eeuu at 63 de 0
Muerto: eeuu
china at 87 de 92
eeuu at 4 de 91
china at 84 de 39
eeuu at 100 de 99
Muerto: china
china at 70 de 42
eeuu at 47 de 32
china at 28 de 60
eeuu at 45 de 35
china at 98 de 84
eeuu at 25 de 58
china at 41 de 68
eeuu at 65 de 14
Muerto: eeuu
china at 93 de 2
eeuu at 91 de 58
Muerto: china
Muerto: eeuu
resultado
china soldados: 10