IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

Problème puissance 4


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2020
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2020
    Messages : 2
    Par défaut Problème puissance 4
    Bonjour, je dois finir le programme de puissance 4, il ne me reste que le test d'alignement mais je rencontre des problèmes pour le faire et lors de l'exécution, pourriez-vous m'aider svp

    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
    #imports
    from time import *
     
    #fonctions
     
        #fonction pour placer les jetons dan la grille
     
    def ecrireTableau (tab, lig , col , val) :
        tab [lig][col] = val
     
        #fonction pour afficher la grille et les séparations en fonction des dimensions du tableau
     
    def affiche(tab):
        head   = '       '
        for i in range (m):
            if i < 10 :
             head = head + str(i+1) + '        '
            else :
                head = head + str(i+1) + '      '
        row ='  ║        ║ '
        hsepdebut = '  ╔' +((8)*'═' + '╦')*(m-1)+ (8)*'═'+'╗'
        hsep   = '  ╠'+(m-1)*((8)*'═' +'╬')+ (8)*'═'+ '╣'
        vspace = ('  ║'+6*' ') *(m)  + (2)*' ' +'║'
        hsepfinal = '  ╚' +(m-1)*((8)*'═' +'╩') + (8)*'═' +'╝'
     
        print(head)
        print (hsepdebut)
        for i in range (l) :
            print (vspace)
     
            if p4[i][0] == '':
                row = '  ║     '+p4[i][0]+'   ║ '
            else:
                row = '  ║    '+p4[i][0]+'   ║ '
            for j in range (m-1) :
                if p4[i][j+1] == '':
                    row = row + '   '+str(p4[i][j+1])+'    ║ '
                else :
                    row = row + '   '+str(p4[i][j+1])+'   ║ '
            print(row)
            print (vspace)
            if i<(l-1):
               print(hsep)
            else :
                print(hsepfinal)
     
     
        # fonction pour créer le tableau (nb lignes et colonnes)
     
    def creerTableau (lig,col) :
        a = [0] * lig
        for i in range(lig):
            a[i] = [''] * col
        return a
     
        #fonction pour la chute des jetons
     
    def chute (tab,col) :
        k = 0
        casevide = True
        #time.sleep (1) ne marche pas il faut faire avec (sleep)
        while (casevide==True and k<l) :
            sleep (0.4)
            if p4[k][c] == '':
                ecrireTableau (p4,k,c,signe)
                if k > 0 :
                    p4 [k-1][c] = ''
            else :
                casevide = False
            k = k+1
            print (60*'\n')
            affiche (p4)
     
    #def alignementhorizontal(tab,lig, col, signe) :
     
       # alignement = True
     
        #for a in range(l) :
       #     for b in range(m-3) :
         #       while (alignement == True and  b < m-3) :
     
       #             if p4[a][b] == p4[a][b+1] == p4[a][b+2] == p4[a][b+3] == signe :
        #                print ("Le jeu est terminé")
         #              alignementhorizontal = False
          #        else :
           #             alignementhorizontal = True
     
    #def alignementvertical(tab,lig, col, signe) :
     
     #   alignement = True
     
      #  for c in range(m) :
       #     for d in range(l-3) :
       #         while (alignement == True and  b < m-3) :
     
        #            if p4[d][c] == p4[d+1][c] == p4[d+2][c] == p4[d+3][c] == signe :
         #               print ("Le jeu est terminé")
          #              alignementvertical = False
           #         else :
           #             alignementvertical = True
     
     
     
    #programme
     
        # définir nombre lignes et colonnes et colonne dans laquelle on met le jeton
     
    joueur1 = input(("le joueur 1 est :"))
    joueur2 = input(("le joueur 2 est :"))
    l= int(input ("nombre de lignes :"))
    m= int(input ("nombre de colones :"))
     
     
        # mettre dans la boucle du jeu
    jeu = True
    tour = 1
    #c = int (input ("colonne :"))-1
    p4 = creerTableau (l,m)
     
     
    #boucle jeu
     
    while jeu :
        if  tour %2 == 0  :
            signe = '0'
            print(joueur2,"joue dans la colonne :")
            c = int (input ("colonne :"))-1
            tourjoueur = c
            chute (p4,c)
     
     
     
     
            #alignement horizontal
     
            for a in range(l) :
                for b in range(m-3) :
                    while ( b < m-3) :
     
                        if p4[a][b] == p4[a][b+1] == p4[a][b+2] == p4[a][b+3] == 0 :
                            print ("Le jeu est terminé")
                            jeu = False
                        else :
                            jeu = True
     
                            #alignement vertical
     
            for c in range(m) :
                for d in range(l-3) :
                    while ( b < m-3) :
     
                        if p4[d][c] == p4[d+1][c] == p4[d+2][c] == p4[d+3][c] == 0 :
                            print ("Le jeu est terminé")
                            jeu = False
                        else :
                            jeu = True
     
    #alignement diago plus tard
     
     
     
     
     
     
            if tourjoueur == 'q' :
                jeu = False
            else :
                print ("au tour de" ,joueur1)
                tour = tour + 1
     
        else :
            signe = 'X'
            print(joueur1, "joue dans la colonne :")
            c = int (input ("colonne :"))-1
            tourjoueur = c
     
            chute (p4, c)
            if tourjoueur == 'q':
                jeu = False
            else :
                print ("au tour de, joueur2")
                tour = tour + 1


    voila merci de votre aide ^^

  2. #2
    Membre Expert

    Homme Profil pro
    Ingénieur calcul scientifique
    Inscrit en
    Mars 2013
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur calcul scientifique

    Informations forums :
    Inscription : Mars 2013
    Messages : 1 229
    Par défaut
    Salut

    Je t'ai amélioré ton code, et t'ai donné la manière de procéder pour l'alignement horizontal et vertical.

    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
    import time
     
    #fonctions
     
    #fonction pour placer les jetons dans la grille
     
    def ecrireTableau(tab, lig , col , val) :
        tab[lig][col] = val
     
    #fonction pour afficher la grille et les séparations en fonction des dimensions du tableau
     
    def affiche(tab):
        head   = '      '
        for i in range(m):
            head += '%2d       '%(i+1)
     
        hrule     = 8*('%c'%9552)
        row       = '  %c        %c '%(9553,9553)
        hsepdebut = '  %c'%(9556)+(m-1)*(hrule + chr(9574))+ hrule+chr(9559)
        hsep      = '  %c'%(9568)+(m-1)*(hrule + chr(9580))+ hrule+chr(9571)
        hsepfinal = '  %c'%(9562)+(m-1)*(hrule + chr(9577))+ hrule+chr(9565)
        vspace    = m*('  %c      '%(9553)) + '  %c'%(9553)
     
        print(head)
        print(hsepdebut)
        for i in range(l) :
            print(vspace)
            row = '  %c '%(9553)
            for j in range(m) :
                row += '   %1s   %c '%(p4[i][j],9553)
            print(row)
            print(vspace)
            if i<(l-1):
                print(hsep)
            else :
                print(hsepfinal)
     
     
    # fonction pour créer le tableau (nb lignes et colonnes)
    def creerTableau (lig,col) :
        return [[''] * col  for _ in range(lig) ]
     
     
    #fonction pour la chute des jetons
    def chute (tab,col, signe) :
        k = 0
        casevide = True
        while (casevide==True and k<l) :
            time.sleep(0.3)
            if p4[k][c] == '':
                ecrireTableau(p4,k,c,signe)
                if k > 0 :
                    p4[k-1][c] = ''
            else :
                casevide = False
            k+=1
            print(60*'\n')
            affiche(p4)
        return k-1
     
    def alignementhorizontal(tab,lig, col, nb_row, nb_col) :
        signe = tab[lig][col]
     
        nb_align = 1
        for i in range(col+1, min(col+4, nb_col)): ## J'explore à droite du pion joué
            if tab[lig][i] == signe : nb_align += 1
            else : break
        for i in range(col-1, max(-1, col-4), -1): ## J'explore à gauche du pion joué
            if tab[lig][i] == signe : nb_align += 1
            else : break
     
        return nb_align >= 4
     
    def alignementvertical(tab,lig, col, nb_row, nb_col) :
        signe = tab[lig][col]
        alignement = False   
        if lig+4<=nb_row :
            ### Sinon on déborde de la grille
            alignement = signe == tab[lig+1][c] == tab[lig+2][c] == tab[lig+3][c]
        return alignement
     
     
     
    #programme
     
    # définir nombre lignes et colonnes et colonne dans laquelle on met le jeton
     
    joueur1 = input(("le joueur 1 est :"))
    joueur2 = input(("le joueur 2 est :"))
    joueurs = [joueur1, joueur2]
    signes  = ['X','0']
    l= int(input ("nombre de lignes :"))
    m= int(input ("nombre de colones :"))
     
     
    # mettre dans la boucle du jeu
     
    tour = 0
    p4 = creerTableau (l,m)
     
    #boucle jeu
     
    while tour < l*m : ### Et oui car on peut remplir la grille sans avoir de vainqueur !
        k=tour%2
     
        signe = signes[k]
        print(joueurs[k], "joue dans la colonne :")
     
        tourjoueur = input("colonne :")
        if tourjoueur == 'q':
            print("Vous avez quitté le jeu")
            break
     
        c = int(tourjoueur)-1
        r = chute(p4, c, signe)
     
        if alignementvertical(p4,r, c, l, m) or alignementhorizontal(p4,r, c, l, m) :  
            print("Victoire de ",joueurs[k])
            break
     
        tour +=1
    A noter :
    - Les caractères en #&... ne s'affiche pas correctement sur toutes les machines. Il faut utiliser chr(...) ou bien les chaines formatées avec %c (chapitre à réviser car ca simplifie vachement la fonction affiche)
    - Dans la fonction chute, il faut retourner la colonne à laquelle se trouve le pion tombé. Car sinon après on ne sait pas où il est.
    - Pour faire les vérifications d'alignement, inutile de vérifier toute la grille à chaque fois. Il suffit de vérifier par rapport au dernier pion joué.
    Donc si c'est un alignement vertical, c'est facile, c'est forcément avec les 3 autres pions du dessous. Si c'est un alignement horizontal c'est avec des pions de la gauche et/ou de la droite. Et pour le diagonale, je te le laisse, mais ça va être très proche du système pour l'horizontal, et faudra faire varier le numéro de ligne en meme temps que le numéro de colonne pour avoir un déplacement en biais, en prenant soin à chaque fois que tu ne dépasse aucun bords.


    La version donnée ici est encore très améliorable, mais déjà c'est une nette amélioration.

    Edit : Vous devriiez passé m et l en paramètre de la fonction affiche. Car à l'intérieur des cette fonction, python n'est pas censé savoir ce que valent ces variables. Et elles pourraient valoir n'importe quoi. En les passant en paramètres, vous vous assurez que c'est bien celle là.

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2020
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2020
    Messages : 2
    Par défaut
    ok merci pour l'aide !! je vois ça de suite

Discussions similaires

  1. Problème puissance de nombre négatif
    Par Bob_Tom dans le forum Fortran
    Réponses: 8
    Dernier message: 14/12/2012, 12h13
  2. [C] Problème Puissance 4
    Par Invité dans le forum Débuter
    Réponses: 9
    Dernier message: 17/12/2008, 14h34
  3. Problème avec les puissances
    Par Hoopsy dans le forum C++Builder
    Réponses: 8
    Dernier message: 25/06/2007, 23h40
  4. Problème avec la fonction pow(les puissance)
    Par Clément76 dans le forum C
    Réponses: 10
    Dernier message: 04/10/2006, 12h44
  5. 8x11=0 !! problème fonction puissance
    Par Renesis57 dans le forum C
    Réponses: 18
    Dernier message: 26/11/2005, 14h54

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo