Aditionnement de variable

Résolu
frères Messages postés 49 Date d'inscription   Statut Membre Dernière intervention   -  
nidhogg-59 Messages postés 102 Date d'inscription   Statut Membre Dernière intervention   -
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

Utilisateur anonyme
 
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
frères Messages postés 49 Date d'inscription   Statut Membre Dernière intervention   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
nidhogg-59 Messages postés 102 Date d'inscription   Statut Membre Dernière intervention   28
 
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
frères Messages postés 49 Date d'inscription   Statut Membre Dernière intervention   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
Polux31 Messages postés 6917 Date d'inscription   Statut Membre Dernière intervention   1 204
 
Slt,

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

:o|
0
nidhogg-59 Messages postés 102 Date d'inscription   Statut Membre Dernière intervention   28
 
@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
frères Messages postés 49 Date d'inscription   Statut Membre Dernière intervention   1
 
Comment je peut faire pour recommencer un tour sans tout remettre ?

Sinon c'a marche super merci !!!
0
nidhogg-59 Messages postés 102 Date d'inscription   Statut Membre Dernière intervention   28
 
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
frères Messages postés 49 Date d'inscription   Statut Membre Dernière intervention   1
 
Comment on "boucle" ?
0
nidhogg-59 Messages postés 102 Date d'inscription   Statut Membre Dernière intervention   28
 
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
frères Messages postés 49 Date d'inscription   Statut Membre Dernière intervention   1
 
Je l'ai appris il y a longtemps et je ne me souviens plus de tout


sinon merci
.
0