Aditionnement de variable

Résolu
Bonjour,
j'ai récemment eu envie de faire un mini-jeu sur python avec des combats mais j'ai un problème lors du calcul des dégats :mon module

print ("Que veut tu faire ?")
print ("Tu peut :")
print ("1 = Attaquer avec ton arme")
print ("2 = Attaquer avec de la magie")
print ("3 = Te Défendre")
print ("Tape juste le chiffre")

actionhéros = int (input() ) ;

if (actionhéros == 1) :
Nombredégatattaquearme = ATKarmehéros +((nbrePUIShéros/2) +(nbreATKhéros/2)) - ((nbreDEFmonstre/2) + (nbreAGImonstre/2))
print ("Tu attaque 'Nombredégatattaquearme' .")

et on me met cela :

Traceback (most recent call last):
File "<pyshell#12>", line 1, in <module>
ATKarmehéros+nbrePUIShéros/2+nbreATKhéros/2-nbreDEFmonstre/2+nbreAGImonstre/2
NameError: name 'ATKarmehéros' is not defined

or ma variable ATKarmehéros existe !!!

je ne sais pas où je me suis planté .

4 réponses

  1. Salut, ta variable n'existe pas dans la portée du if. Avant toute chose, déclare les variables comme :

    ATKarmeheros = 0

    Python laisse pas mal de libertés mais il faut aussi de bonnes pratiques :-)
    0
    1. d'accord mais j'ai un autre module qui demande la force de chaque chose et ATKarmehéros n'est pas toujours de zéros .
      0
  2. Comme le dit Rocky_123, ta variable n'existe pas dans cette portion du code.
    Tu l'a sûrement créé dans le corps d'une fonction, dans un module externe ou quelque chose comme ça.

    Si tu postais tout ton code, ou ne serais-ce que la partie où tu déclare cette variable, ce serait plus simple de trouver le problème, et au passage les classes sont plus qu'utiles dans ce genre de cas!
    0
    1. D'accord voila tout le code :

      print ("Combien de PV à le monstre ?")

      nbrePVmonstre = int (input() ) ;

      print ("Combien d'Attaque à-t'il ?")

      nbreATKmonstre = int (input() ) ;

      print ("Combien de PM à le monstre ?")

      nbrePMmonstre = int (input() ) ;

      print ("Combien de Puissance à-t'il ?")

      nbrePUISmonstre = int (input() ) ;

      print ("Combien de Defence à-t'il ?")

      nbreDEFmonstre = int (input() ) ;

      print ("Combien d'Agilité à-t'il ?")

      nbreAGImonstre = int (input() ) ;

      print ("Combien de Magie à-t'il ?")

      nbreMAGmonstre = int (input() ) ;

      print ("Combien de PV à le Héros ?")

      nbrePVhéros = int (input() ) ;

      print ("Combien d'Attaque à-t'il ?")

      nbreATKhéros = int (input() ) ;

      print ("Combien de PM à le Héros ?")

      nbrePMhéros = int (input() ) ;

      print ("Combien de Puissance à-t'il ?")

      nbrePUIShéros = int (input() ) ;

      print ("Combien de Defence à-t'il ?")

      nbreDEFhéros = int (input() ) ;

      print ("Combien d'Agilité à-t'il ?")

      nbreAGIhéros = int (input() ) ;

      print ("Combien de Magie à-t'il ?")

      nbreMAGhéros = int (input() ) ;

      print ("Es-ce que le héros à une arme ?")
      print ("1- Oui")
      print ("2- Non")

      siarmehéros = int (input() ) ;

      if ( siarmehéros == 1 ) :

      print ("Combien à-t-elle d'Attaque")

      ATKarmehéros = int (input() ) ;

      else :
      print ("D'accord pas d'arme")

      print ("Que veut tu faire ?")
      print ("Tu peut :")
      print ("1 = Attaquer avec ton arme")
      print ("2 = Attaquer avec de la magie")
      print ("3 = Te Défendre")
      print ("Tape juste le chiffre")

      actionhéros = int (input() ) ;

      if (actionhéros == 1) :
      Nombredégatattaquearme = ATKarmehéros +((nbrePUIShéros/2) +(nbreATKhéros/2)) - ((nbreDEFmonstre/2) + (nbreAGImonstre/2))
      print ("Tu attaque :")
      print(Nombredégatattaquearme)
      nbrePVmonstre = nbrePVmonstre - Nombredégatattaquearme
      print ("Il reste au monstre :")
      print (nbrePVmonstre)
      0
  3. Slt,

    Il n'y a pas de correcteur orthographique en Python ... c'est dommage, parce que ça pique les yeux ....

    :o|
    0
    1. @Polux31 : Quelle réponse utile, et même si c'est vrai qu'il y des erreurs, c'est pas vraiment le sujet...

      Sinon, pour ce qui est de ta variable existante/inexistante:
      Tu déclare ta variable ATKarmehéros uniquement dans le cas où siarmehéros vaut 1, dans l'autre cas, elle n'est pas déclarée; c'est là ton erreur.

      Tu devrais faire une fonction dans laquelle tu initialises toutes tes variables à 0, appelée en début de jeu ou quand le jeu est fini et que tu recommences une partie.

      def init():
          return 0, 0, ..., 0
      nbrePVmonstre, nbreATKmonstre, ..., ATKarmehéros = init()
      

      Si tu ne veux pas, tu peux simplement mettre ta variable ATKarmehéros à 0 quand il n'a pas d'arme:
      else :
          print ("D'accord pas d'arme")
          ATKarmehéros = 0
      

      Voilà, j'espère avoir réglé le problème! =)
      Ps: Attention, normalement les variables n'ont pas d'accent (dans tous les cas) ni de majuscules (sauf pour les classes qui ont une maj au début et constantes qui sont entièrement en maj).
      Voilà! Si t'as d'autres questions n'hésite pas!
      0
      1. Comment je peut faire pour recommencer un tour sans tout remettre ?

        Sinon c'a marche super merci !!!
        0
      2. Avec une boucle while , tu devrais t'en sortir:
        fini=0
        while not fini:
            print ("Combien de PV à le monstre ?")
            nbrePVmonstre = int (input() ) ;
            print ("Combien d'Attaque à-t'il ?")
            nbreATKmonstre = int (input() ) ;
            ...
           if (actionhéros == 1) :
              Nombredégatattaquearme = ATKarmehéros +((nbrePUIShéros/2) +(nbreATKhéros/2)) -    
           ((nbreDEFmonstre/2) + (nbreAGImonstre/2))
              print ("Tu attaque :")
              print(Nombredégatattaquearme)
              nbrePVmonstre = nbrePVmonstre - Nombredégatattaquearme
              print ("Il reste au monstre :")
              print (nbrePVmonstre)

        en gros ton programme va boucler sur tout ton code tant que fini vaut 0.
        A toi de te débrouiller pour changer cette variable grâce au une question genre:
        fini=int(input("voulez-vous continuer? 0=oui; 1=non"))

        Si tu n'as pas envie de redemander à chaque fois les caractéristiques de ton perso,
        tu peux faire boucler ton code juste sur la portion où tu demandes les pdv de l'ennemi et le moteur de jeu.
        0
      3. Comment on "boucle" ?
        0
      4. bah je l'ai écrit: avec le mot-clé while.
        tu met
        while condition:
            code
            ...

        Et tant que la condition est respectée, ça va boucler sur le code.
        Comment est-ce que tu apprends la programmation?
        0
      5. Je l'ai appris il y a longtemps et je ne me souviens plus de tout

        sinon merci
        .
        0