Banda Ancha EU

Comunidad de usuarios
de fibra, móvil y ADSL

hosting en interdominios
242 lecturas y 4 respuestas
  • Boca de Pez Boca de Pez
    6

    Problema en python

    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

    Este tema lleva más de 6 meses inactivo. Es recomendable que abras un nuevo tema para retomar la conversación.
    • A ver, que hace eones de miles de siglos que no toco…

      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

    • Boca de Pez Boca de Pez
      6

      yo la verdad es que no se de phyton, pero no será que es un…

      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.

    • Boca de Pez Boca de Pez
      6

      Lo he conseguido arreglar poniendo el if vida Bueno, la…

      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

    • # -*- coding: utf-8 -*- import random class contrincante():…

      # -*- 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