BandaAncha

  • 🔍 en 📰 artículos ⏎
  • 🔍 en 💬 foros ⏎
  • 🔍 en 👇 este 💬 foro ⏎
  • 🔍 en 👇 este 💬 tema ⏎
Regístrate Regístrate Identifícate Identifícate

Problema en python

BocaDePez

hola, soy nuevo en python y estoy haciendo un juego para ir practicando. Sin embargo, tengo un problema con los condicionales, ya que python los ignora. El código es el siguiente:

 # -*- coding: utf-8 -*-
 import random
 vida = 100
 ataque = 30
 defensa = 25
 evasion = 3 #Por ahora no sirve
 #ahora el enemigo
 vidaen = 98
 ataqueen = 24
 defensaen = 20
 evasionen = 1 #Por ahora no sirve
 raw_input("Empieza el combate, ENTER para continuar")
 #Con esto iniciamos el combate
 def atacar(ataque,defensa,evasion,ataqueen,defensaen,evasionen,vidaen,vida):
 print "Turno del jugador"
 ataquesi = random.randint(1, 100) #Probabilidad de atacar
 evasionensi = random.randint(1, 100) #Probabilidad de evasión enemiga
 if ataquesi > 10 and evasionensi < 90: #Si se saca + de 10 para atacar y menos de 90 en evasion...
 total = ataque - defensaen
 print "Jugador ataca a enemigo, daño total:"
 print total
 vidaen = vidaen - total
 print "El enemigo tiene",vidaen,"puntos de vida"
 #lo dejamos por un momento así
 else:
 print "Jugador falla al atacar"
 #lo dejamos por un momento así
 print "Turno del enemigo"
 ataqueensi = random.randint(1, 100) #Probabilidad de atacar
 evasionsi = random.randint(1, 100) #Probabilidad de evasión enemiga
 if ataqueensi > 10 and evasionsi < 90: #Si se saca + de 10 para atacar y menos de 90 en evasion...
 total = ataqueen - defensa
 print "Enemigo ataca a jugador, daño total:"
 print total
 vida = vida - total
 print "El Jugador tiene",vida, "puntos de vida"
 #lo dejamos por el momento así
 else:
 print "Enemigo falla al atacar"
 #lo dejamos por el momento así
 #veamos que pasa cuando se muere
 print
 if (vida < 0):
 print "Enemigo mata a Jugador"
 print "Has perdido"
 raw_input()
 else:
 atacar(ataque,defensa,evasion,ataqueen,defensaen,evasionen,vidaen,vida)
 print
 if (vidaen < 0):
 print "Jugador mata a enemigo"
 print "Has ganado este combate"
 raw_input()
 else:
 atacar(ataque,defensa,evasion,ataqueen,defensaen,evasionen,vidaen,vida)
 atacar(ataque,defensa,evasion,ataqueen,defensaen,evasionen,vidaen,vida)

Todo va bien, pero la última parte no funciona, en teoría cuando "vida" o "vidaen" llega a cero, tendría que parar y avisarte, sin embargo, no lo hace y el programa sigue hasta el infinito :P

¿Qué estoy haciendo mal? También he probado a hacerlo con while y nada.

Gracias

LineBenchmark

A ver, que hace eones de miles de siglos que no toco Python...

Y asi?

 if vida < 0:

 print "Enemigo mata a Jugador"

 print "Has perdido"

 raw_input()

 else:

 atacar(ataque,defensa,evasion,ataqueen,defensaen,evasionen,vidaen,vida)

 elif vidaen < 0:

 print "Jugador mata a enemigo"

 print "Has ganado este combate"

 raw_input()

 else:

 atacar(ataque,defensa,evasion,ataqueen,defensaen,evasionen,vidaen,vida)

Sino, usa switch/case

BocaDePez

yo la verdad es que no se de phyton, pero no será que es un unsigned y no puede bajar se cero? Has probado con menor o igual?
yo que tu usaría un lenguaje mas restrictivo con los tipos de datos. AL mi me gusta java por aquello de que funciona en cualquier sitio, pero C tampoco esta mal.

BocaDePez

Lo he conseguido arreglar poniendo el if vida < 0 justo después de que el jugador reciba daño y if vidaen < 0 cuando le ocurre al enemigo, la verdad es que no entiendo por qué funciona ahí y si lo pones más abajo no, si no me he salido de la función en ningún momento :S pero bueno, mientras funcione...

Bueno, la verdad es que C está muy bien para mi gusto, pero me apetecía probar python a ver si era tan bueno como dicen ;)

Saludos y gracias

lontxo

# -*- coding: utf-8 -*-
import random

class contrincante():

........def __init__(self,nombre,vida,ataque,defensa,evasion):
................self.nombre = nombre
................self.vida = vida
................self.ataque = ataque
................self.defensa = defensa
................self.evasion = evasion

........def atacar(self,enemigo):
................ataquesi = random.randint(1, 100) #Probabilidad de atacar
................evasionensi = random.randint(1, 100) #Probabilidad de evasión enemiga
................if ataquesi > 10 and evasionensi < 90: #Si se saca + de 10 para atacar y menos de 90 en evasion...
........................total = self.ataque - enemigo.defensa
........................print "Jugador ataca a %s, daño total: %i" % (enemigo.nombre,total)
........................enemigo.vida = enemigo.vida - total
........................print "El enemigo tiene %s puntos de vida" % enemigo.vida
........................#lo dejamos por un momento así
................else:
........................print "%s falla al atacar" % self.nombre
........................#lo dejamos por un momento así
........ print "Turno de %s" % enemigo.nombre

................return self.resultado(enemigo)

........def resultado(self,enemigo):
................final = False;
................if enemigo.vida < 0:
........................print "%s matan a %s" % (self.nombre,enemigo.nombre)
........................if self.nombre == 'los Buenos':
................................print "Has ganado la partida"
........................else:
................................print "Has perdido la partida"
........................final = True

........................return final

if __name__ == '__main__':
........elbueno = contrincante( nombre = 'los Buenos',vida=100,ataque=30,defensa=25,evasion=3)
........elenemigo = contrincante(nombre = 'los Malos',vida=98,ataque=24,defensa=20,evasion=1)

........while True:
................if elbueno.atacar( elenemigo ): break;
................if elenemigo.atacar( elbueno ): break;

Saludos