Bonjour bonjour !

Excusez moi de vous dérangez mais j'ai un petit soucis de code.
Pour les cours, nous devons coder un sliding row (une sorte de puissance 4 amélioré). Donc mon binôme et moi avons codé (pas toujours très joliment mais bon) le jeu mais nous n'arrivons pas à traiter les erreurs. (et aussi quelques soucis dans le comptage de point mais ça, c'est moins important).

En fait, tout ce passe bien tant que l'utilisateur tape les bonnes choses, dès que ce n'est pas le cas, rien de va plus.
J'explique.
- Dans un premier temps, nous demandons de renseigner la taille de la grille sous la forme cxl (c étant le nombre de colonne et l le nombre de ligne). Mais dès qu'il y a une erreur de syntaxe, gros message tout rouge. J'ai tenté de mettre des try et des except mais je ne les maitrise pas trop ce qui fait que... ben ça ne me donne rien !
- Après, il y a un soucis qui apparait si l'utilisateur demande de mettre son pion dans une colonne qui n'est pas créé. (Et là, je ne sais même pas trop pas quel bout le prendre...)
- Enfin, soucis aussi quand l'utilisateur veut mettre un pion dans une colonne déjà pleine... Je pense que ça se traite de la même façon que l'erreur précédente mais vu que je n'ai pas réussi à le faire...

Voici notre code actuel :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
# ==============================================================================
# Projet : A2 : Sliding Rows
# ==============================================================================
"""Puissance 4"""
__author__  = "Aurelia  et Amandine "
__version__ = "1.8.6.7"
__date__    = "2010-12-21"
__usage__   = """
Note : Appuyer sur entrée pour stopper l'application"""
# ------------------------------------------------------------------------------
 
def points(x):
    global ptj1,ptj2,dernierptj1,dernierptj2
    if x== '<' or x == '>':  # si le joueur a switché on incrémente les derniers points aux nouveaux
        ptj1=dernierptj1
        ptj2=dernierptj2
    else:
        ptj1=0
        ptj2=0
 
    for colonne in range (0,col):
        for ligne in range (0,lin):         #compte les points qui pourraient être faits à l'horizontale
            if mat[ligne][colonne]<>'   ': 
                if colonne+3>col-1:          #permet de ne pas sortir de la grille et de ne pas générer une erreur
                    break
                elif mat[ligne][colonne+1]==mat[ligne][colonne+2]==mat[ligne][colonne+3]==mat[ligne][colonne]: 
                    if mat[ligne][colonne]==' X ':
                        ptj1+=1                     # ptj1 sont les points du joueur 1
                    elif mat[ligne][colonne]==' O ':
                        ptj2+=1
        for ligne in range (0,lin):         #compte les points qui pourraient être faits à la verticale
            if mat[ligne][colonne]<>'   ': 
                if ligne+3>lin-1:
                    break
                elif mat[ligne+1][colonne]==mat[ligne+2][colonne]==mat[ligne+3][colonne]==mat[ligne][colonne]:
                      if mat[ligne][colonne]==' X ':
                        ptj1+=1
                      elif mat[ligne][colonne]==' O ':
                        ptj2+=1
        for ligne in range (0,lin):         #compte les points qui pourraient être faits en diagonale descendante
            if mat[ligne][colonne]<>'   ': 
                if colonne+3>col-1 or ligne+3>lin-1:
                    break
                elif mat[ligne+1][colonne+1]==mat[ligne+2][colonne+2]==mat[ligne+3][colonne+3]==mat[ligne][colonne]: 
                    if mat[ligne][colonne]==' X ':
                        ptj1+=1
                    elif mat[ligne][colonne]==' O ':
                        ptj2+=1
        for ligne in range (0,lin):         #compte les points qui pourraient être faits en diagonale montante
            if mat[ligne][colonne]<>'   ': 
                if colonne+3>col-1 or ligne-3<0:
                    break
                elif mat[ligne-1][colonne+1]==mat[ligne-2][colonne+2]==mat[ligne-3][colonne+3]==mat[ligne][colonne]: 
                    if mat[ligne][colonne]==' X ':
                        ptj1+=1
                    elif mat[ligne][colonne]==' O ':
                        ptj2+=1
    dernierptj1=ptj1 #stocke les points pour pouvoir les sommer si jamais le prochain joueur switch
    dernierptj2=ptj2
    print "Joueur 1 : %s  |  Joueur 2 : %s" % (ptj1,ptj2)
 
# ------------------------------------------------------------------------------
 
def switchd(x): #permet de faire le switch à droite.
    for colonne in range (col-1,0,-1): #pars de la dernière colonne et remonte vers la première afin de tout décaler petit à petit vers la droite
        for ligne in range (0,lin):
            if mat[ligne][colonne]=='   ':
                i=0
                while mat[ligne][colonne]=='   ':
                    if colonne == 0: # si on atteint la première colonne, on a alors déplacer toute la grille, on break.
                        break
                    colonne-=1
                    i+=1
                    if mat[ligne][colonne]<>'   ':
                        mat[ligne][colonne+i]= mat[ligne][colonne]
                        mat[ligne][colonne]='   '
                        break
                colonne+=i
    points(x)
    return mat
 
# ------------------------------------------------------------------------------
 
def switchg(x): #permet de faire le switch à gauche.
    for colonne in range (0,col-1):
        for ligne in range (0,lin):
            if mat[ligne][colonne]=='   ':
                i=0
                while mat[ligne][colonne]=='   ':
                    if colonne == col-1:
                        break
                    colonne+=1
                    i+=1
                    if mat[ligne][colonne]<>'   ':
                        mat[ligne][colonne-i]= mat[ligne][colonne]
                        mat[ligne][colonne]='   '
                        break
                colonne=colonne-i
    points(x)
    return mat
# ------------------------------------------------------------------------------
 
def trouve(mots, lettre): 
    i = [] # i est une liste.
    for index, caractere in enumerate(mots): # enumerate retourne le tuple index/caractere.
        if caractere == lettre:
            i.append(index) # Si le caractere correspond à la lettre on donne sa localisation dans le mot.
    return i # Retourne les index.
 
# ------------------------------------------------------------------------------
 
def position(x): #Les deux joueurs sont dans la même fonction.
    global cptj,nbswitch1,nbswitch2
    if x == '>':
        if nbswitch1==3 and cptj%2 != 0: # Limitation du switch à trois coups
            print "vous n'avez plus le droit de switcher, rejouez"
            j1 = raw_input ("<> Joueur 1: ")
            print str_multable(position(j1))# fait rejouer le joueur
        if nbswitch2==3 and cptj%2 == 0:
            print "vous n'avez plus le droit de switcher, rejouez"
            j2 = raw_input ("<> Joueur 2: ")
            print str_multable(position(j2))
        switchd(x)
        if cptj%2 != 0:
            nbswitch1+=1
        else:
            nbswitch2+=1
    elif x == '<':
        if nbswitch1==3 and cptj%2 != 0:
            print "vous n'avez plus le droit de switcher, rejouez"
            j1 = raw_input ("<> Joueur 1: ")
            print str_multable(position(j1))# fait rejouer le joueur
        if nbswitch2==3 and cptj%2 == 0:
            print "vous n'avez plus le droit de switcher, rejouez"
            j2 = raw_input ("<> Joueur 2: ")
            print str_multable(position(j2))
        switchg(x)
        if cptj%2 != 0:
            nbswitch1+=1
        else:
            nbswitch2+=1
    else :
        mots='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
        n_col = str(trouve(mots, x)) #associe à la lettre tapée un numéro de colonne (renvoie un str)
        n_lin = lin-1
        n_col=int(n_col[1:2]) # int juste le chiffre sans se préoccuper des ptits crochets pourris.
        if cptj%2 != 0: # permet de déterminer si c'est au tour du joueur 1 ou 2 de jouer selon la parité.
            if mat[n_lin][n_col]=='   ':
                mat[n_lin][n_col]=' X '
            else :
                while mat[n_lin][n_col]<>'   ':
                    n_lin -=1
                mat[n_lin][n_col]=' X '
        else:
            if mat[n_lin][n_col]=='   ':
                    mat[n_lin][n_col]=' O '
            else :
                while mat[n_lin][n_col]<>'   ':
                    n_lin -=1
                mat[n_lin][n_col]=' O '
        points(x) # affiche les points à chaque tour, au dessus de la grille.
    cptj +=1
    return mat
 
# ------------------------------------------------------------------------------
 
def grille(c,l):# crée la grille vide
    global lin, col, mat 
    lin, col = l, c # rend les variables c et l globales (en devenant col et lin)
    mat = [["%3s" % ('') for q in range(1, col+1)] for p in range(1, lin+1)]
    letters = list('ABCDEFGHIJKLMNOPQRSTUVWXYZ')
    letters ='  ' + '   '.join(letters[:c]) #Associe une lettre à chaque colonne
    col_sep, row_sep = '|', "\n%s+\n" % ('+---'*c)
    rows = ["%s%s%s" % (col_sep, col_sep.join(cols), col_sep) for cols in mat]
    return "%s%s%s%s" % (letters, row_sep, row_sep.join(rows), row_sep)
 
# ------------------------------------------------------------------------------
 
def str_multable(mat): # crée une grille qu'on va remplir.
    letters = list('ABCDEFGHIJKLMNOPQRSTUVWXYZ')
    letters ='  ' + '   '.join(letters[:len(mat[0])]) #Associe une lettre à chaque colonne
    col_sep, row_sep = '|', "\n%s+\n" % ('+---'*len(mat[0])) 
    rows = ["%s%s%s" % (col_sep, col_sep.join(cols), col_sep) for cols in mat]
    return "%s%s%s%s" % (letters, row_sep, row_sep.join(rows), row_sep)
 
# ------------------------------------------------------------------------------
 
def main():
  print """%s\n%s%s\n%s""" % ('='*80, __doc__, __usage__, '='*80)
  while True :
    global win,ptj1,ptj2
    win = False
    global cptj,nbswitch1,nbswitch2
    cptj = 1 #elle ne s'incrémentait pas car elle se réinitialisait dès qu'un joueur jouait. Là elle est initialisée depuis le début de la partie.
    nbswitch1=0    #initialise le nombre de switch exécuté par chaque joueur afin de le limiter à 3 plus tard
    nbswitch2=0
    line = raw_input("<> Entrez le nombre de colonnes et le nombre de lignes (cxl): ")
    if line == '':
        rep = raw_input("Voulez vous vraiment quitter le jeu ? (oui/non) ")
        if rep == 'oui':
            print "Bye bye !"
            break
        elif rep == 'non':
            line = raw_input("<> Entrez le nombre de colonnes et le nombre de lignes: ")
 
    c, l = line.split('x')
    c, l = int(c), int(l)
    print grille(c, l) #Fait une grille vide de la taille souhaité
    while win == False: #demande de jouer tant que personne n'a gagné.
        j1 = raw_input ("<> Joueur 1: ")
        if j1 == '':
            rep = raw_input("Voulez vous vraiment quitter le jeu ? (oui/non) ")
            if rep == 'oui':
                print "Bye bye !"
                break
            elif rep == 'non':
               j1 = raw_input("<> Joueur 1: ")
 
        print str_multable(position(j1))
        if ptj1 >= 3:
            if ptj1==ptj2:
                print "Les deux joueurs sont ex-aequo"
                win= True
                break
            else:
                print "Le joueur 1 a gagné =D"
                win= True
                break
 
        j2 = raw_input ("<> Joueur 2: ")
        if j2 == '':
            rep = raw_input("Voulez vous vraiment quitter le jeu ? (oui/non) ")
            if rep == 'oui':
                print "Bye bye !"
                break 
            elif rep == 'non':
               j2 = raw_input ("<> Joueur 2: ")
 
        print str_multable(position(j2))
        if ptj2 >= 3:
            if ptj1==ptj2:
                print "Les deux joueurs sont ex-aequo"
                win= True
                break
            else:
                print "Le joueur 2 a gagné =D"
                win= True
                break
 
# ------------------------------------------------------------------------------
 
if __name__ == '__main__':
  main()
Merci d'avance pour votre aide !