Comment faire un compteur dans une condition dans une définition [Résolu]

Signaler
-
 peraro -
Bonjour,
je cherche à savoir comment savoir combien de fois une condition a été exécuté dans une définition :
J'ai créé un programme qui python qui simule le résultat d'un match de foot ( victoire de l'équipe à domicile , à l'extérieur ou match nul) seulement ce programme peu donner des résultat différents pour un même match car c'est IA basé en partie sur le hasard .
J'ai donc ajouté une boucle qui fait que le programme s'exécute 1000 fois mais j'aimerai avoir un compteur qui m'indique combien de fois le programme trouve la victoire de l'équipe à domicile etc ...

voici un résumé du programme :

c = 1000

while c < 1000 :

  def 1:
    blabla

 def 2 :
   if blabla :
      print("v de l'équipe à domicile") <-- comment mettre un compteur ici?
   if blabla
      print("v de l'équipe à l'exterieur")<-- là
   else blabla
        print("match nul)<-- et là



code complet :

import numpy as np
import pandas

c = 0

while c < 1000 :
  x_entrer = np.array(([3,2,0,1,2,2,2,3,0,2,2,1,3,0,2,4,6,0,2,4,4], [3,0,2,2,1,2,1,1,3,2,1,2,3,1,1,2,2,6,4,2,4], [2,2,1,2,2,1,1,4,0,2,3,0,1,1,3,2,8,0,4,6,0], [2,2,1,3,2,0,1,2,2,2,3,0,1,3,1,2,4,4,0,6,4], [1,3,1,1,1,3,3,1,1,0,2,3,2,1,2,6,2,2,6,4,0], [1,0,4,2,1,2,0,1,4,2,1,2,1,0,4,0,2,8,4,2,4], [1,2,2,3,1,1,0,2,3,2,1,2,1,1,3,0,4,6,4,2,4], [2,3,0,2,1,2,0,4,1,1,1,3,3,2,0,0,8,2,6,2,2], [1,2,2,2,0,3,2,2,1,3,0,2,0,1,4,4,4,2,4,0,6], [3,0,2,0,0,5,4,1,0,0,0,5,3,2,0,8,2,0,10,0,0], [3,2,0,3,0,2,3,1,1,0,2,3,1,2,2,6,2,2,6,4,0]), dtype=float)
  y = np.array(([0], [1], [1], [0.5], [0], [0.5], [1], [0.5], [1], [0]), dtype=float)
  x_entrer = x_entrer/np.amax(x_entrer, axis=0) 

  X = np.split(x_entrer, [10])[0]
  xPrediction = np.split(x_entrer, [10])[1]

  class Neural_Network(object):
    def __init__(self):

      self.inputSize = 21
      self.outputSize = 1
      self.hiddenSize = 22 

      self.W1 = np.random.randn(self.inputSize, self.hiddenSize) 
      self.W2 = np.random.randn(self.hiddenSize, self.outputSize) 
  

    def forward(self, X):

      self.z = np.dot(X, self.W1)
      self.z2 = self.sigmoid(self.z)
      self.z3 = np.dot(self.z2, self.W2)
      o = self.sigmoid(self.z3)
      return o

    def sigmoid(self, s):
      return 1/(1+np.exp(-s))

    def sigmoidPrime(self, s):
      return s * (1 - s)

    def backward(self, X, y, o):

      self.o_error = y - o
      self.o_delta = self.o_error*self.sigmoidPrime(o)

      self.z2_error = self.o_delta.dot(self.W2.T)
      self.z2_delta = self.z2_error*self.sigmoidPrime(self.z2) 

      self.W1 += X.T.dot(self.z2_delta)
      self.W2 += self.z2.T.dot(self.o_delta)

    def train(self, X, y):

    def predict(self):
      
      print("")
      if(self.forward(xPrediction) < (1/3)):
        print("\033[32mVictoire de l'équipe à domicile ! \033[0m\n")<--ici
      elif(self.forward(xPrediction) > (2/3)):   
        print("\033[31mVictoire de l'équipe à l'extérieur ! \033[0m\n")<-- ici
      elif(self.forward(xPrediction) == (1/3)):
        print("Victoire de l'équipe à domicile ou match nul ! \n")
      elif(self.forward(xPrediction) == (1/3)):
        print("Victoire de l'équipe à l'extérieur ou match nul ! \n")
      else :
        print("\033[33mMatch nul ! \033[0m\n")<-- ici

      

  NN = Neural_Network()

  for i in range(1000):
      NN.train(X,y)

  NN.predict()
  c=c+1



Configuration: Linux / Firefox 87.0



EDIT : Ajout des balises de code (la coloration syntaxique).
Explications disponibles ici : ICI

Merci d'y penser dans tes prochains messages.

5 réponses

Messages postés
1047
Date d'inscription
lundi 23 mars 2020
Statut
Membre
Dernière intervention
11 mai 2021
112
Bonjour,


L'indentation étant importante en Python, merci de copier/coller ici ton code complet avec les balises de code
mode d'emploi:
https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code

Visuellement, ça doit ressembler à ceci (avec la coloration syntaxique) :

def test():
    print('test')

test()
Messages postés
15564
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
11 mai 2021
850
bonjour peut-être ainsi:
if(self.forward(xPrediction) < (1/3)):
    nvictdom += 1
    print("\033[32mVictoire de l'équipe à domicile ! \033[0m\n")<--ici

dans le programme principal, avant le premier appel:
nvictdom = 0
Le problème c'est que je ne peut pas définir nvictdom en dehors de la définition predict et que si je définie nvicdom dans la définition predict , nvictdom va se réinitialiser à zéro a chaque fois que la fonction va être effectuer .
Messages postés
15564
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
11 mai 2021
850
il faut ajouter une declaration
global
dans la fonction, exemple:
def inc():
    global compteur
    compteur += 1
    print(compteur)
compteur=0
for i in range(3):
    inc()
>
Messages postés
15564
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
11 mai 2021

merci je vais essayer
j'ai déja vu cette déclaration mais je n'ai pas compris ce qu'elle fait
Messages postés
15564
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
11 mai 2021
850 > peraro
>
Messages postés
15564
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
11 mai 2021

Oui je crois que j'ai compris ça m'a l'aire d'être la solution .
> peraro
Ca y est mon programme marche grâce à la déclaration global merci ( -;
faut-il que je repense entièrement mon programme dans ce cas ?
j'ai remis le code :

import numpy as np
import pandas

c = 0

while c < 1000 :
  x_entrer = np.array(([3,2,0,1,2,2,2,3,0,2,2,1,3,0,2,4,6,0,2,4,4], [3,0,2,2,1,2,1,1,3,2,1,2,3,1,1,2,2,6,4,2,4], [2,2,1,2,2,1,1,4,0,2,3,0,1,1,3,2,8,0,4,6,0], [2,2,1,3,2,0,1,2,2,2,3,0,1,3,1,2,4,4,0,6,4], [1,3,1,1,1,3,3,1,1,0,2,3,2,1,2,6,2,2,6,4,0], [1,0,4,2,1,2,0,1,4,2,1,2,1,0,4,0,2,8,4,2,4], [1,2,2,3,1,1,0,2,3,2,1,2,1,1,3,0,4,6,4,2,4], [2,3,0,2,1,2,0,4,1,1,1,3,3,2,0,0,8,2,6,2,2], [1,2,2,2,0,3,2,2,1,3,0,2,0,1,4,4,4,2,4,0,6], [3,0,2,0,0,5,4,1,0,0,0,5,3,2,0,8,2,0,10,0,0], [3,2,0,3,0,2,3,1,1,0,2,3,1,2,2,6,2,2,6,4,0]), dtype=float)
  y = np.array(([0], [1], [1], [0.5], [0], [0.5], [1], [0.5], [1], [0]), dtype=float)
  x_entrer = x_entrer/np.amax(x_entrer, axis=0) 

  X = np.split(x_entrer, [10])[0]
  xPrediction = np.split(x_entrer, [10])[1]

  class Neural_Network(object):
    def __init__(self):

      self.inputSize = 21
      self.outputSize = 1
      self.hiddenSize = 22 

      self.W1 = np.random.randn(self.inputSize, self.hiddenSize) 
      self.W2 = np.random.randn(self.hiddenSize, self.outputSize) 
  

    def forward(self, X):

      self.z = np.dot(X, self.W1)
      self.z2 = self.sigmoid(self.z)
      self.z3 = np.dot(self.z2, self.W2)
      o = self.sigmoid(self.z3)
      return o

    def sigmoid(self, s):
      return 1/(1+np.exp(-s))

    def sigmoidPrime(self, s):
      return s * (1 - s)

    def backward(self, X, y, o):

      self.o_error = y - o
      self.o_delta = self.o_error*self.sigmoidPrime(o)

      self.z2_error = self.o_delta.dot(self.W2.T)
      self.z2_delta = self.z2_error*self.sigmoidPrime(self.z2) 

      self.W1 += X.T.dot(self.z2_delta)
      self.W2 += self.z2.T.dot(self.o_delta)

    def train(self, X, y):

    def predict(self):
      
      print("")
      if(self.forward(xPrediction) < (1/3)):
        print("\033[32mVictoire de l'équipe à domicile ! \033[0m\n")
       #compteur victoiredom
      elif(self.forward(xPrediction) > (2/3)):   
        print("\033[31mVictoire de l'équipe à l'extérieur ! \033[0m\n")#<-- ici
        #compteur victoireextérieur
      else :
        print("\033[33mMatch nul ! \033[0m\n")#<-- et ici
        #compteur matchnul

  NN = Neural_Network()

  for i in range(1000):
      NN.train(X,y)

  NN.predict()
  c=c+1