Aditionnement de variable

Résolu/Fermé
frères Messages postés 49 Date d'inscription dimanche 12 août 2012 Statut Membre Dernière intervention 23 juin 2015 - 6 janv. 2014 à 21:26
nidhogg-59 Messages postés 102 Date d'inscription mercredi 20 juin 2012 Statut Membre Dernière intervention 5 décembre 2015 - 11 janv. 2014 à 09:38
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
6 janv. 2014 à 21:32
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 dimanche 12 août 2012 Statut Membre Dernière intervention 23 juin 2015 1
8 janv. 2014 à 15:33
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 mercredi 20 juin 2012 Statut Membre Dernière intervention 5 décembre 2015 27
Modifié par nidhogg-59 le 8/01/2014 à 19:06
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 dimanche 12 août 2012 Statut Membre Dernière intervention 23 juin 2015 1
8 janv. 2014 à 19:08
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 mardi 25 septembre 2007 Statut Membre Dernière intervention 1 novembre 2016 1 204
8 janv. 2014 à 19:36
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 mercredi 20 juin 2012 Statut Membre Dernière intervention 5 décembre 2015 27
Modifié par nidhogg-59 le 9/01/2014 à 01:21
@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 dimanche 12 août 2012 Statut Membre Dernière intervention 23 juin 2015 1
Modifié par frères le 9/01/2014 à 19:09
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 mercredi 20 juin 2012 Statut Membre Dernière intervention 5 décembre 2015 27
Modifié par nidhogg-59 le 9/01/2014 à 21:43
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 dimanche 12 août 2012 Statut Membre Dernière intervention 23 juin 2015 1
10 janv. 2014 à 15:48
Comment on "boucle" ?
0
nidhogg-59 Messages postés 102 Date d'inscription mercredi 20 juin 2012 Statut Membre Dernière intervention 5 décembre 2015 27
Modifié par nidhogg-59 le 11/01/2014 à 08:15
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 dimanche 12 août 2012 Statut Membre Dernière intervention 23 juin 2015 1
Modifié par frères le 11/01/2014 à 08:38
Je l'ai appris il y a longtemps et je ne me souviens plus de tout


sinon merci
.
0