Name 'x' is assigned to before global declaration

Résolu/Fermé
IISaigneur Messages postés 21 Date d'inscription mercredi 6 juin 2012 Statut Membre Dernière intervention 11 mai 2017 - Modifié par NHenry le 12/05/2016 à 20:12
IISaigneur Messages postés 21 Date d'inscription mercredi 6 juin 2012 Statut Membre Dernière intervention 11 mai 2017 - 14 mai 2016 à 14:37
Bonjours,
Je sollicite votre aide car j'ai un problème sur un programme de bataille naval.
Je débute dans ce langage, cependant ce programme est mon projet d'isn et il marchait très bien au lycée je l'ai récupéré via l'accé a distance de ma session et lorsque je lance sur mon pc il m'affiche cette erreur (voir pièce jointe).
merci de votre aide. Je joint aussi mon code désoler pour la non optimisation mais j'ai peur d'y touché vu que python est très capricieux :
GrilleJ1 = ["0"]*11
GrilleJ2 = ["0"]*11

Rejouer = 0
Fin = 0
global VFin1
global VFin2
VFin1 = 0
VFin2 = 0
def GrillePosJ1 () :
    a = 1
    Chiffre = 0
    b = 0
    Lettre = 64
    for i in range (11):
        GrilleJ1[i]=["0"]*11
        if i!=0 :
            GrilleJ1 [i][0] = Chiffre
        Chiffre = Chiffre + 1
                
    for a in range (11):
        if a!=0 :
            GrilleJ1[0][a]=str(chr(Lettre))
        Lettre = Lettre + 1


def GrillePosJ2 () :
    a = 1
    Chiffre = 0
    b = 0
    Lettre = 64
    for i in range (11):
        GrilleJ2[i]=["0"]*11
        if i!=0 :
            GrilleJ2 [i][0] = Chiffre
        Chiffre = Chiffre + 1
                
    for a in range (11):
        if a!=0 :
            GrilleJ2[0][a]=str(chr(Lettre))
        Lettre = Lettre + 1
    

def AfficherJ1():
    for i in range (11):
        print (GrilleJ1[i])



def AfficherJ2():
    for i in range (11):
        print (GrilleJ2[i])


def BateauxJ1 ():
    for x in range(2,3):
        if x == 3:
            x = 3
            for xx in range(1):
                PositionJ1 (3)
        PositionJ1 (x)


def BateauxJ2 ():
    for x in range(2,3):
        if x == 3:
            x = 3
            for xx in range(1):
                PositionJ2 (3)
        PositionJ2 (x)
 

def PositionJ1 (long):
    Vrange = 0
    Vorientation = 0
    Vposition = 0
    Occupée = 0
    
    while Vorientation == 0 :
        print(" \nChoisissez la direction du bateau de longueur",long,"( Horizontale = 0 ; Vertical = 1 ) : " )
        Dir = input("")
        Dir = int(Dir)
        if Dir == 0 or Dir == 1:
            Vorientation = 1
        else :
            print("Veuillez choisir un nombre entre 0 ou 1")
            Vorientation = 0
        
    while Vposition == 0:
        LPos = input("Choisissez la ligne sur laquelle la première case du navire est positionné : ")
        LPos = int(LPos)
        CPos = input("Choisissez la colone sur laquelle la première case du navire est positionné : ")
        CPos = int(CPos)

        for P in range (len (GrilleJ1[LPos][CPos])):
            if GrilleJ1 [LPos][CPos]=="0":
                Vposition = 1
            elif GrilleJ1 [LPos][CPos]=="X":
                print("Une cases est déjà occupée veuillez choisir d'autres coordonnées")
                Vposition = 0
                    
    if Dir == 0:
        for p in range (long):
            GrilleJ1 [LPos][CPos]="X"
            CPos = CPos + 1
                                 
    if Dir == 1:
        for p in range (long):
            GrilleJ1 [LPos][CPos]="X"
            LPos = LPos + 1
            
    print("\n")
    AfficherJ1()

    
def PositionJ2 (long):
    Vrange = 0
    Vorientation = 0
    Vposition = 0
    Occupée = 0
    
    while Vorientation == 0 :
        print(" \nChoisissez la direction du bateau de longueur",long,"( Horizontale = 0 ; Vertical = 1 ) : " )
        Dir = input("")
        Dir = int(Dir)
        if Dir == 0 or Dir == 1:
            Vorientation = 1
        else :
            print("Veuillez choisir un nombre entre 0 ou 1")
            Vorientation = 0
        
    while Vposition == 0:
        LPos = input("Choisissez la ligne sur laquelle la première case du navire est positionné : ")
        LPos = int(LPos)
        CPos = input("Choisissez la colone sur laquelle la première case du navire est positionné : ")
        CPos = int(CPos)

        for P in range (len (GrilleJ2[LPos][CPos])):
            if GrilleJ2 [LPos][CPos]=="0":
                Vposition = 1
            elif GrilleJ2 [LPos][CPos]=="X":
                print("Une cases est déjà occupée veuillez choisir d'autres coordonnées")
                Vposition = 0
                    
    if Dir == 0:
        for p in range (long):
            GrilleJ2 [LPos][CPos]="X"
            CPos = CPos + 1
                                 
    if Dir == 1:
        for p in range (long):
            GrilleJ2 [LPos][CPos]="X"
            LPos = LPos + 1
            
    print("\n")
    AfficherJ2()


def TirJ1 ():
    global VFin1
    VTir = 0
    while VTir == 0:
        LTir = input("Choisissez la ligne de tir: ")
        LTir = int (LTir)
        CTir = input("Choisissez la colonne de tir: ")
        CTir = int (CTir)
        
        if LTir > 10 or CTir > 10:
            print ("Veuillez choisir des coordonnées valides")
            VTir = 0
        else :
            VTir = 1
            
    if GrilleJ2 [LTir][CTir]=="X":
        print ("Touché")
        GrilleJ2 [LTir][CTir]="t"
        VFin1 = VFin1 + 1
    else :
        print ("Dans l'eau")
        
    


def TirJ2 ():
    global VFin2
    VTir = 0
    while VTir == 0:
        LTir = input("Choisissez la ligne de tir: ")
        LTir = int (LTir)
        CTir = input("Choisissez la colonne de tir: ")
        CTir = int (CTir)
        
        if LTir > 10 or CTir > 10:
            print ("Veuillez choisir des coordonnées valides")
            VTir = 0
        else :
            VTir = 1
            
    if GrilleJ1 [LTir][CTir]=="X":
        print ("Touché")
        GrilleJ1 [LTir][CTir]="t"
        VFin2 = VFin2 + 1
    else :
        print ("Dans l'eau")
        
    


def ChangementJ (c) :
    import time
    time.sleep (1)
    for z in range (50):
        print("\n")
    print("A votre tours Joueur ",c,".")


Change = 0
while Rejouer == 0:
    GrillePosJ1()
    AfficherJ1()
    BateauxJ1()

    ChangementJ (2)

    GrillePosJ2()
    AfficherJ2()
    BateauxJ2()
    while Fin == 0:
        global VFin1
        global VFIn2
        if (Change%2 == 0):
            ChangementJ (1)
            TirJ1()
            if VFin1 == 17:
                print("Le Joueur 1 à gagné")
                Fin = 1
        else :
            ChangementJ (2)
            TirJ2()
            if VFin2 == 17:
                print("Le Joueur 2 à gagné")
                Fin = 1
        Change = Change + 1
    Rejouer = input("Voulez-vous rejouez ( Oui -> 1 ; Non -> 2):")
    Rejouer = int(Rejouer)




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

Merci d'y penser dans tes prochains messages.

3 réponses

fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 835
13 mai 2016 à 09:01
Bonjour,

Python capricieux ? Pas plus qu'un autre langage. Je dirais même moins en fait :-). De plus, pour les modifications, rien ne t'empêche de faire une sauvegarde de cette version, et de faire une autre version test.

Pour l'erreur, je n'ai pas tout lu mais :
global VFin1
Tu as mis cette ligne deux fois. Garde uniquement la 1ère occurrence.
0