Partage
  • Partager sur Facebook
  • Partager sur Twitter

Portée des variable

Sujet résolu
    4 janvier 2011 à 4:19:08

    Bonjour à tous,

    Comme je faisais un petit programme de pile ou face pour voir comment tendent aléatoirement deux variables ayant des probabilités égales, j'ai reçu une erreur. Donc, voici mon script et l'erreur survenue...

    from random import randrange
    
    i = 0
    z = 0
    y = 0
    x = str()
    continuer = str()
    
    def aleatoire():
        x = randrange(1)
        if x == 0:
            i += 1
            y += 1
            if i % 100000:
                return "face # {}".format(i)
            else:
                return "face"
        else:
            z += 1
            y += 1
            if z % 100000:
                return "pile # {}".format(z)
            else:
                return "pile"
    
    
    while 1:
        x = aleatoire()
        if y % 225000:
            continuer = input("Vous avez atteint un total de {} lancés. Désirez-vous continuer ?".format(y))
            if continuer == "q":
                print("Vous avez quitté")
                break
            else:
                print("Le jeu continue !")
        else:
            print(x)
    
    print("Au revoir")
    


    Traceback (most recent call last):
    File "C:\Users\Admin\Documents\Patrick\codage\python\pile-face.py", line 28, in <module>
    x = aleatoire()
    File "C:\Users\Admin\Documents\Patrick\codage\python\pile-face.py", line 12, in aleatoire
    i += 1
    UnboundLocalError: local variable 'i' referenced before assignment


    Bref, on me dit ne pas avoir préalablement déclaré i... Toutefois, comme on peut le voir, elle a été déclarée hors de la fonction, ce qui devrait, je crois (???), affecter le local ?

    Merci à tous
    • Partager sur Facebook
    • Partager sur Twitter
      4 janvier 2011 à 13:21:33

      i est déclaré hors de la fonction, tu peux la lire mais pas la modifier.
      utilises 'global'.

      def aleatoire():
          global i,y
          x = randrange(1)
          if x == 0:
              i += 1
              y += 1
              if i % 100000:
                  return "face # {}".format(i)
             ...
      
      • Partager sur Facebook
      • Partager sur Twitter

      Python c'est bon, mangez-en. 

        4 janvier 2011 à 18:03:48

        Et BTW, en utilisant x = randrange(1) , tu définis une nouvelle variable x local à la fonction et tu ne réutilises pas ta globale définie au dessus.
        • Partager sur Facebook
        • Partager sur Twitter

        Portée des variable

        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
        • Editeur
        • Markdown