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

Programmation multimédia/Jeux Python Discussion :

Assemblage de deux parties de code


Sujet :

Programmation multimédia/Jeux Python

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Mai 2015
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Mai 2015
    Messages : 1
    Points : 1
    Points
    1
    Par défaut Assemblage de deux parties de code
    Salut à tous !

    Dans le cadre de la spécialité ISN de Terminale S, nous avons voulu créé, un ami et moi, un programme permettant de résoudre des grilles de Sudoku
    Je m'occupe de la partie de l'algorithme de résolution tandis que lui s'est occupé de l'interface graphique.
    Nous avons des problèmes pour "assembler" nos deux codes et nous aurions besoin d'un peu d'aide

    Je vous laisse donc nos deux codes séparément :

    L'algorithme de résolution :

    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
    #Fonction permettant l'initialisation de la grille de sudoku d'une part et d'une grille des possibles= solution d'autre part#
    def init() :
        global sudoku
        global possible
        sudoku = [[0 for j in range(10)] for i in range(10)]
        possible = [[[0 for k in range(10)] for j in range(10)] for i in range(10)]
     
    #Grille facile (réussite) exemple pour la suivi du code
        place(1,3,6)
        place(1,4,7)
        place(2,2,7)
        place(2,4,9)
        place(2,5,2)
        place(2,7,4)
        place(2,8,5)
        place(3,2,8)
        place(3,3,9)
        place(3,4,3)
        place(3,5,6)
        place(3,6,5)
        place(4,2,3)
        place(4,3,5)
        place(4,4,8)
        place(4,7,2)
        place(4,8,7)
        place(5,1,9)
        place(5,4,2)
        place(5,6,7)
        place(5,9,3)
        place(6,2,2)
        place(6,3,7)
        place(6,6,1)
        place(6,7,5)
        place(6,8,4)
        place(7,4,1)
        place(7,5,7)
        place(7,6,3)
        place(7,7,6)
        place(7,8,8)
        place(8,2,6)
        place(8,3,1)
        place(8,5,8)
        place(8,6,2)
        place(8,8,3)
        place(9,6,6)
        place(9,7,7)
     
    #Grille expert (échec)
    #    place(1,5,8)
    #    place(1,9,3)
    #    place(2,1,3)
    #    place(2,2,8)
    #    place(2,7,5)
    #    place(2,9,7)
    #    place(3,2,2)
    #    place(3,4,1)
    #    place(3,8,6)
    #    place(4,1,7)
    #    place(4,2,4)
    #    place(4,5,6)
    #    place(4,8,8)
    #    place(5,4,5)
    #    place(5,6,1)
    #    place(6,5,4)
    #    place(7,3,2)
    #    place(7,5,9)
    #    place(7,9,4)
    #    place(8,3,6)
    #    place(8,4,7)
    #    place(8,7,8)
    #    place(9,3,4)
    #    place(9,6,6)
    #    place(9,7,7)
     
    def affichage() :
        print
        for x in range(1,10) :
            print (sudoku[x])
        print ()
     
    def jeu() :
        global k
        k=0
        while k==0 :
            k=1
            for x in range(1,10) :
                for y in range(1,10) :
                    verifca(x,y)
            for x in range(1,10) :
                for n in range(1,10) :
                    verifli(x,n)
            for y in range(1,10) :
                for n in range(1,10) :
                    verifco(y,n)
            for z in range(1,10) :
                for n in range(1,10) :
                    verifbl(z,n)
     
    def place(x,y,n) :
        global sudoku
        global possible
        global k
        sudoku[x][y]=n
        for i in range(1,10) :
            if (i!=x) :
                possible[i][y][n]=1
            if (i!=y) :
               possible[x][i][n]=1
            for m in range(1,10) :
                possible[x][y][m]=1
            x1=int((x-1)/3)
            y1=int((y-1)/3)
            i1=int((i-1)/3)
            if (3*x1+(i-1)%3+1!=x or 3*y1+i1+1!=y) :
                possible[3*x1+(i-1)%3+1][3*y1+i1+1][n]=1
        k=0
     
    def verifca(x,y) :
        compteur=0
        for n in range (1,10) :
            if (possible[x][y][n]==0) :
                compteur=compteur+1
                candidat=n
        if (compteur==1) :
            place(x,y,candidat)
     
    def verifli(x,n) :
        compteur=0
        for y in range(1,10) :
            if (possible[x][y][n]==0) :
                compteur=compteur+1
                candidat=y
        if (compteur==1) :
            place(x,candidat,n)
     
    def verifco(y,n) :
        compteur=0
        for x in range(1,10) :
            if (possible[x][y][n]==0) :
                compteur=compteur+1
                candidat=x
        if (compteur==1) :
            place(candidat,y,n)
     
    def verifbl(z,n) :
        compteur=0
        z1=int((z-1)/3)
        for w in range(1,10) :
            w1=int((w-1)/3)
            x1=3*z1+w1+1
            y1=3*((z-1)%3)+(w-1)%3+1
            if (possible[x1][y1][n]==0) :
                compteur=compteur+1
                candidat1=x1
                candidat2=y1
        if (compteur==1) :
            place(candidat1,candidat2,n)
     
    sudoku = []
    possible = []
     
    init()
     
    affichage()
     
    jeu()
     
    isum=0
    for x in range(1,10) :
        for y in range(1,10) :
            isum=isum+sudoku[x][y]
     
    if (isum==405) :
        affichage()
        print ("reussite")
    else :
        affichage()
        print ("echec")

    Puis l'interface graphique de mon ami :

    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
    from tkinter import *
    import tkinter.messagebox
    import tkinter.filedialog
    import random
     
     
    from numpy import *
    ecriture=("comic sans ms",13)
    nbcase=9
    case=50
    x0,y0=9,9
    chiffre=[0,1,2,3,4,5,6,7,8,9]
     
     
    Mafenetre = Tk()
    Mafenetre.title("Jeu du sudoku")
     
    cases = dict()
    cases=zeros((9,9),'i')
     
     
    def grille():
     
        continuer=1
        while continuer==1:
            i=int(input("Ligne ? (0 à 8) "))
            if i<0 or i>8:
                i=int(input("Ligne ? (0 à 8) "))
     
            j=int(input("Colonne ? (0 à 8) "))
            if j<0 or j>8:
                j=int(input("Colonne ? (0 à 8) "))
     
            m=int(input("Valeur ? (1 à 9) "))
            if m<1 or m>9:
                m=int(input("Valeur ? (1 à 9) "))
     
            cases[j,i] = m;
            continuer=int(input("Continuer ? 1 pour Oui, 0 pour Non "))
     
        for k in range(nbcase+1):
            Can.create_line(x0+case*k, y0,x0+case*k,y0 + nbcase*case)
            Can.create_line(x0, y0+case*k,x0+nbcase*case ,y0+case*k)
            r=1
            c=1
        for r in range(nbcase):
            x = x0 + case * r + case // 2
            for c in range(nbcase):
                y = y0 + case * c + case // 2
     
                if cases[r, c]!=0:
                    cases[r, c] = Can.create_text(x, y, text=cases[r,c])
                else:
                    cases[r, c] = Can.create_text(x, y, text='')
     
     
    def jouer(event):
         w =  event.widget
         value = event.keysym if event.keysym in '123456789' else ''
         if value:
            r, c = correspond(event.y,event.x)
         if (r, c) in cases:
            w.itemconfigure(cases[(r, c)], text=value)
     
     
    def correspond(x,y):
        return [(y-y0)/c,(x-x0)/c]
     
     
    def Apropos():
        tkinter.messagebox.showinfo("A propos","Tutorial Python Tkinter\n(C) Fabrice Sincère")
     
    def Règles():
        tkinter.messagebox.showinfo("Règles","Un sudoku classique contient neuf lignes et neuf colonnes, donc 81 cases au total. Le but du jeu est de remplir ces cases avec des chiffres allant de 1 à 9 en veillant toujours à ce qu'un même chiffre ne figure qu'une seule fois par colonne, une seule fois par ligne, et une seule fois par carré de neuf cases.\nAu début du jeu, Des chiffres sont déjà placés et il vous reste à trouver les autres. En effet, une grille initiale de sudoku correctement constituée ne peut aboutir qu'à une et une seule solution.\n                                         BONNE CHANCE !")
     
    def Résolution():
        tkinter.messagebox.showinfo("Résolution","VOIR AVEC")
    def Quitter():
        Mafenetre.destroy()
     
    Cadre=Frame(Mafenetre)
    TexteC=Text(Mafenetre,height=25,width=25)
    Can=Canvas(Cadre,height=500,width=500,bg="white")
     
    Cadre.grid(row=1,column=0)
    Can.grid(row=2, column=0)
    TexteC.grid(row=1, column=3)
     
    Can.bind( '<KeyPress>', jouer)
    Can.focus_set()
     
    # Création d'un widget Menu
    menubar = Menu(Mafenetre)
     
    menuNouvellePartie = Menu(menubar,tearoff=0)
    menubar.add_command(label="Nouvelle Partie...", command=grille)
     
    menuRésolution = Menu(menubar,tearoff=0)
    menuRésolution.add_command(label="Grille Personelle",command=grille)
    menuRésolution.add_command(label="Grille Actuelle",command=Résolution)
    menubar.add_cascade(label="Résolution", menu=menuRésolution)
     
    menurègles = Menu(menubar,tearoff=0)
    menurègles.add_command(label="Règles", command=Règles)
    menubar.add_cascade(label="Règles", menu=menurègles)
     
    menuaide = Menu(menubar,tearoff=0)
    menuaide.add_command(label="A propos",command=Apropos)
    menubar.add_cascade(label="A propos de", menu=menuaide)
     
    menuQuitter = Menu(menubar,tearoff=0)
    menuQuitter.add_command(label="Quitter", command=Quitter)
    menubar.add_cascade(label="Quitter le jeu", menu=menuQuitter)
     
    # Affichage du menu
    Mafenetre.config(menu=menubar)
     
    # Utilisation d'un dictionnaire pour conserver une référence
    gifdict={}
     
    Mafenetre.mainloop()


    Dans l’espérance que vous pourrez nous apporter de l'aide,
    A bientôt !

    Superfranois

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 281
    Points : 36 768
    Points
    36 768
    Par défaut
    Salut,

    Citation Envoyé par superfranois Voir le message
    Dans l’espérance que vous pourrez nous apporter de l'aide,
    La difficulté est que vous vous parliez pour savoir quelles sont les fonctions qui permettent de récupérer ce qu'on dessinera côté "interface".
    Une fois défini le rôle et les attentes càd. un tas de fonctions, on pourra peut être vous aider à les écrire.... mais tant que n'est pas défini ce qui doit être passé en paramètre et retourné, çà ne va pas être facile.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Membre chevronné
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Septembre 2013
    Messages
    485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2013
    Messages : 485
    Points : 2 151
    Points
    2 151
    Par défaut
    superfranois,

    J'ai voulus regarder votre petit code, j'ai laissé tombé au bout d'une minute, désolé.

    Comme vous êtes des lycée et que vous êtes là pour apprendre, je vais vous donner un petit truc pour que l'on puisse plus facilement comprendre, débuguer et améliorer un programme informatique.

    Vous n’êtes pas cours de math: arrêtez avec vos variables à 1 ou 2 caractères.
    x,x1,y,y1,n,i, j,k,z, .... mais ça correspond à quoi?

    Merci d'utiliser des noms de variables explicitent afin de comprendre rapidement les données que vous manipulez sans devoir remonter sans arrêt 10 lignes au dessus.
    En python, nous pouvons utiliser des variables jusqu'à 255 caractères, alors arrêtez d'être avare en ce domaine.
    Et je suis partisan de nom de fonctions et variables plus longues et plus explicites qu'un roman en commentaire.

    Voilà, cette petite remarque pour essayer de vous donner de bonnes habitudes tôt.
    On voit encore trop souvent en entreprise du code illisible (et encore bien pire que le votre) que je trouvais important d'essayer de convertir de jeunes Padawan non encore converti au coté obsure

  4. #4
    Membre à l'essai
    Homme Profil pro
    Lycéen
    Inscrit en
    Janvier 2015
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Janvier 2015
    Messages : 17
    Points : 10
    Points
    10
    Par défaut
    Salut je suis l'ami en question ^^

    Citation Envoyé par Laurent 1973 Voir le message
    Vous n’êtes pas cours de math: arrêtez avec vos variables à 1 ou 2 caractères.
    x,x1,y,y1,n,i, j,k,z, .... mais ça correspond à quoi?

    Merci d'utiliser des noms de variables explicitent afin de comprendre rapidement les données que vous manipulez sans devoir remonter sans arrêt 10 lignes au dessus.
    En python, nous pouvons utiliser des variables jusqu'à 255 caractères, alors arrêtez d'être avare en ce domaine.
    Et je suis partisan de nom de fonctions et variables plus longues et plus explicites qu'un roman en commentaire.
    On utilise beaucoup des variables mathématiques et on pensait pas qu'il pouvait y avoir autant de caractères, donc merci
    ah oui et est-ce que si on améliore nos codes, vous pourriez y jeter un coup d’œil à nouveau svp?

  5. #5
    Membre chevronné
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Septembre 2013
    Messages
    485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2013
    Messages : 485
    Points : 2 151
    Points
    2 151
    Par défaut
    Si vous faites le petit effort de refactorisation, je ferais celui de plonger dans votre code, ok

  6. #6
    Membre à l'essai
    Homme Profil pro
    Lycéen
    Inscrit en
    Janvier 2015
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Janvier 2015
    Messages : 17
    Points : 10
    Points
    10
    Par défaut
    Salut Laurent,

    J'ai refactorisé les variables et commenté mon programme, il ne manque plus que mon ami qui devrait très bientôt mettre le sien.
    Merci de nous aide

    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
    # importation des modules
    from tkinter import *
    import tkinter.messagebox
    import tkinter.filedialog
    import tkinter
    import random
    from numpy import *
     
    ecriture=("comic sans ms",13) # écriture des chiffres
    nbcase=9 # définit le nombre de case en ligne et en colonne
    case=50
    x0, y0 =9,9 # x0 correspond au nombre de lignes en abscisses et y0 celles en ordonées.
     
    # Ouvre la fenêtre graphique et la nomme
    Mafenetre = Tk()
    Mafenetre.title("Jeu du sudoku")
     
    #crée une matrice de 0 pour les remplacer par des chiffres de l'utilisateur.
    cases = dict()
    cases=zeros((9,9),'i')
     
     
    def grille():
    # demande à l'utilisateur les valeurs en ordonée et en abcsisse pour ensuite rentrer un nombre dans la bonne case.
        continuer=1
        while continuer==1:
            i=int(input("Ligne ? (0 à 8) "))
            if i<0 or i>8:
                i=int(input("Ligne ? (0 à 8) "))
     
            j=int(input("Colonne ? (0 à 8) "))
            if j<0 or j>8:
                j=int(input("Colonne ? (0 à 8) "))
     
            m=int(input("Valeur ? (1 à 9) "))
            if m<1 or m>9:
                m=int(input("Valeur ? (1 à 9) "))
     
            cases[j,i] = m;
            continuer=int(input("Continuer ? 1 pour Oui, 0 pour Non "))
     
        for k in range(nbcase+1): #trace les lignes en colonnes et vice-versa sur l'interface graphique.
            Can.create_line(x0+case*k, y0, x0+case*k, y0 + nbcase*case)
            Can.create_line(x0, y0+case*k,x0+nbcase*case ,y0+case*k)
     
            ligne =1
            colonne =1
        for ligne in range(nbcase):
            x = x0 + case * ligne + case // 2
            for colonne in range(nbcase):
                y = y0 + case * colonne + case // 2
     
            if cases[lignes, colonne]!=0:
                    cases[ligne, colonne] = Can.create_text(x, y, text=cases[ligne,colonne]) # rentre l'écriture des cases avec les valeurs
            else:
                    cases[ligne, colonne] = Can.create_text(x, y, text='') #crée le texte à l'intérieur des cases vides
     
    #fonction prise sur internet permettant l'implémentation des chiffres à l'intérieur des cases.
    def jouer(event):
         w =  event.widget
         value = event.keysym if event.keysym in '123456789' else ''
         if value:
            ligne, colonne = correspond(event.y,event.x)
         if (ligne, colonne) in cases:
            w.itemconfigure(cases[(ligne, colonne)], text=value)
     
     
     
    def correspond(x,y):
        return [(y-y0)/colonne,(x-x0)/colonne]
     
    # Fonctions permettant l'affichage de messages sur l'interface et de quitter cette interface
    def Apropos():
        tkinter.messagebox.showinfo("A propos","")
     
    def Règles():
        tkinter.messagebox.showinfo("Règles","Un sudoku classique contient neuf lignes et neuf colonnes, donc 81 cases au total. Le but du jeu est de remplir ces cases avec des chiffres allant de 1 à 9 en veillant toujours à ce qu'un même chiffre ne figure qu'une seule fois par colonne, une seule fois par ligne, et une seule fois par carré de neuf cases.\nAu début du jeu, Des chiffres sont déjà placés et il vous reste à trouver les autres. En effet, une grille initiale de sudoku correctement constituée ne peut aboutir qu'à une et une seule solution.", justify=tkinter.RIGHT)
     
    def Résolution():
        tkinter.messagebox.showinfo("Résolution","VOIR AVEC PIERRE-FRANCOIS")
    def Quitter():
        Mafenetre.destroy()
     
     
    Cadre=Frame(Mafenetre)
    TexteC=Text(Mafenetre,height=25,width=25)
    Can=Canvas(Cadre,height=500,width=500,bg="white")
     
    Cadre.grid(row=1,column=0)
    Can.grid(row=2, column=0)
    TexteC.grid(row=1, column=3)
    Can.bind( '<KeyPress>', jouer)
    Can.focus_set()
     
    # Création d'un widget Menu
    menubar = Menu(Mafenetre)
     
    menuNouvellePartie = Menu(menubar,tearoff=0)
    menubar.add_command(label="Nouvelle Partie...", command=grille)
     
    menuRésolution = Menu(menubar,tearoff=0)
    menuRésolution.add_command(label="Grille Personelle",command=grille)
    menuRésolution.add_command(label="Grille Actuelle",command=Résolution)
    menubar.add_cascade(label="Résolution", menu=menuRésolution)
     
    menurègles = Menu(menubar,tearoff=0)
    menurègles.add_command(label="Règles", command=Règles)
    menubar.add_cascade(label="Règles", menu=menurègles)
     
    menuaide = Menu(menubar,tearoff=0)
    menuaide.add_command(label="A propos",command=Apropos)
    menubar.add_cascade(label="A propos de", menu=menuaide)
     
    menuQuitter = Menu(menubar,tearoff=0)
    menuQuitter.add_command(label="Quitter", command=Quitter)
    menubar.add_cascade(label="Quitter le jeu", menu=menuQuitter)
     
    # Affichage du menu
    Mafenetre.config(menu=menubar)
     
    # Utilisation d'un dictionnaire pour conserver une référence
    gifdict={}
     
    Mafenetre.mainloop()

  7. #7
    Membre chevronné
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Septembre 2013
    Messages
    485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2013
    Messages : 485
    Points : 2 151
    Points
    2 151
    Par défaut
    Louis63584,

    Je commence par te donner des petites remarques sur ton code en attendant celui de Superfranois

    => Attention au accents dans les noms de variables et fonctions
    C'est accepté en python3 mais pas en python2 (et je crois pas que beaucoup d'autre langage les acceptes)
    Privilégie la langue de Shakespeare, c'est déjà la règle dans toute les bibliothèques que tu utilises.

    => manque de testes
    Pas mal d'erreurs

    Si je fais "Nouvelle Partie..." ou "Grille Personelle":
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    Ligne ? (0 à 8) 4
    Colonne ? (0 à 8) 4
    Valeur ? (1 à 9) 3
    Continuer ? 1 pour Oui, 0 pour Non 0
    Exception in Tkinter callback
    Traceback (most recent call last):
      File "/usr/lib/python3.4/tkinter/__init__.py", line 1536, in __call__
        return self.func(*args)
      File "module1.py", line 54, in grille
        if cases[lignes, colonne]!=0:
    NameError: name 'lignes' is not defined
    ou "Règles":
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    Exception in Tkinter callback
    Traceback (most recent call last):
      File "/usr/lib/python3.4/tkinter/__init__.py", line 1536, in __call__
        return self.func(*args)
      File "module1.py", line 78, in Règles
        tkinter.messagebox.showinfo("Règles","Un sudoku classique contient neuf lignes et neuf colonnes, donc 81 cases au total. Le but du jeu est de remplir ces cases avec des chiffres allant de 1 à 9 en veillant toujours à ce qu'un même chiffre ne figure qu'une seule fois par colonne, une seule fois par ligne, et une seule fois par carré de neuf cases.\nAu début du jeu, Des chiffres sont déjà placés et il vous reste à trouver les autres. En effet, une grille initiale de sudoku correctement constituée ne peut aboutir qu'à une et une seule solution.", justify=tkinter.RIGHT)
      File "/usr/lib/python3.4/tkinter/messagebox.py", line 83, in showinfo
        return _show(title, message, INFO, OK, **options)
      File "/usr/lib/python3.4/tkinter/messagebox.py", line 72, in _show
        res = Message(**options).show()
      File "/usr/lib/python3.4/tkinter/commondialog.py", line 48, in show
        s = w.tk.call(self.command, *w._options(self.options))
    _tkinter.TclError: bad option "-justify": must be -default, -detail, -icon, -message, -parent, -title, or -type
    Et si je re-fais "Nouvelle Partie..." ou "Grille Personelle":
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Ligne ? (0 à 8) Exception in Tkinter callback
    Traceback (most recent call last):
      File "/usr/lib/python3.4/tkinter/__init__.py", line 1536, in __call__
        return self.func(*args)
      File "module1.py", line 28, in grille
        i=int(input("Ligne ? (0 à 8) "))
    ValueError: invalid literal for int() with base 10: ''
    => Il te manque la boite de dialogue pour demander les valeurs: si tu proposes une interface graphique, il ne faut pas devoir utiliser la console pour saisir les entrées.

    => Ta fonction 'grille' a 2 roles differente
    - demander des valeurs pour la grille de sudoku
    - afficher graphiquement ta grille
    Comme du va devoir afficher aussi la grille de Superfranois, il serait bien de couper cette fonction en deux.
    De là, ta fonction "Résolution" devra déjà appeler les fonctions de Superfranois + afficher/rafraîchir la grille
    voilà déjà une piste pour résoudre un peu votre problème

    Petite question à vous poser pour aider: Où se trouve la structure de données (tableau de 9x9) contenant la grille de sudoku? chez Louis63584 ou chez Superfranois?
    Vous allez forcement devoir partager des données, réfléchissez comment vous aller pouvoir le faire.

    Notez bien: je veux bien vous donner des pistes pour résoudre votre soucis, mais en aucun cas je vous donnerais la solution: c'est un projet de lycée, c'est vous qui trouverez

  8. #8
    Membre à l'essai
    Homme Profil pro
    Lycéen
    Inscrit en
    Janvier 2015
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Janvier 2015
    Messages : 17
    Points : 10
    Points
    10
    Par défaut
    Alors pour "Nouvelle Partie", j'ai fait une erreur de frappe, c'est ligne sans le s....
    Pour l'onglet "Règles", en fait je voulais justifier le texte à droite et bah j'ai pas vérifié si c'est bon.

    Pour ton ré-essai ensuite ça ne m'affiche pas ça moi...
    Après j'utilise Edupython et la boîte de dialogue s'affiche toute seule donc là je comprends pas.

    De plus, pour la fonction "grille" on va laisser mon interface graphique et implémenter son entrée de valeur enfin je pense.

    Finalement, vous disez
    Où se trouve la structure de données (tableau de 9x9) contenant la grille de sudoku? chez Louis63584 ou chez Superfranois?
    Vous allez forcement devoir partager des données, réfléchissez comment vous aller pouvoir le faire.
    Le tableau de valeur, c'est pas la matrice de 9x9 qu'on a utilisé c'est ça ? Plus précisément, vous voulez dire quoi par tableau de valeurs ?

  9. #9
    Membre chevronné
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Septembre 2013
    Messages
    485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2013
    Messages : 485
    Points : 2 151
    Points
    2 151
    Par défaut
    Citation Envoyé par Louis63584 Voir le message
    Le tableau de valeur, c'est pas la matrice de 9x9 qu'on a utilisé c'est ça ? Plus précisément, vous voulez dire quoi par tableau de valeurs ?
    Oui, c'est cela, vous avez chacun la votre, il vous faut réfléchir à pourvoir en échanger qu'une seul.
    Un piste pour faire cela: les paramètres de fonction ou les retours de données de fonction

  10. #10
    Membre à l'essai
    Homme Profil pro
    Lycéen
    Inscrit en
    Janvier 2015
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Janvier 2015
    Messages : 17
    Points : 10
    Points
    10
    Par défaut
    Salut Laurent,
    Pour n'avoir qu'une seule et unique matrice j'ai fait comme cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    cases = dict()
    cases= zeros((9,9),'i')
     
    def init(cases):
        global sudoku
        global possible
        sudoku = [[0 for j in range(9)] for i in range(9)]
        possible = [[[0 for k in range(9)] for j in range(9)] for i in range(9)]
     
    init(cases)
    Est-ce que c'est bon ?

    De plus j'ai constaté que lorsque je crée une nouvelle partie, les chiffres de la grille précédentes ne s'effaçaient pas, comment pourrais-je faire selon vous pour effacer les chiffres de l'ancienne grille ?

  11. #11
    Membre chevronné
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Septembre 2013
    Messages
    485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2013
    Messages : 485
    Points : 2 151
    Points
    2 151
    Par défaut
    Louis,

    Question: Dans ta fonction 'init', a quoi te sert ton paramètre 'cases'? J'ai un peu l'impression que tu n'en fais rien.

    Petit conseil, essaye d’évité au maximum l'utilisation de l'instruction 'global'.
    Utilise plutôt
    • soit le passage par paramètres (données entrantes)
    • soit "return" pour retourner des données (sortantes alors).

    Cela peux être une technique pour vous deux afin de s'échanger vos données entre modules différents.

    Pour info, avec une fonction de ce type:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    def traitement_truc():
       ...
       return valeur1, valeur2, valeur3
    si tu l'utilise ainsi:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mes_valeurs = traitement_truc()
    Le contenu de 'mes_valeurs' sera alors un tuple de taille 3.
    Mais tu peux aussi l'utiliser ainsi:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    val_A, val_B, val_C = traitement_truc()
    et redistribuer les 3 données renvoyées par la fonction directement dans 3 nouvelles variables

    Pour ré-effacer ta grille, il faut te poser la question d'où est stocké les données de cette grille et comment tu fais pour l'initialiser: il te suffit d'avoir une fonction qui fasse pareil et l'appeler pour les réinitialiser.
    Regarde ce que j'ai répondu à ce sujet à 1 de tes collègues lycéens (http://www.developpez.net/forums/d15...faire-rejouer/)

  12. #12
    Membre à l'essai
    Homme Profil pro
    Lycéen
    Inscrit en
    Janvier 2015
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Janvier 2015
    Messages : 17
    Points : 10
    Points
    10
    Par défaut
    Salut,
    Mon collègue s'est débrouillé pour le faire. En tout cas merci à toi

Discussions similaires

  1. rs 232 et assemblage de deux codes C
    Par ahmednaess dans le forum C
    Réponses: 4
    Dernier message: 01/07/2013, 19h46
  2. Diviser un code trop long en deux parties
    Par CHARLI BONGO dans le forum VBA Access
    Réponses: 2
    Dernier message: 11/10/2012, 16h41
  3. [Toutes versions] [VBA] Assemblage de deux codes
    Par hunter76 dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 06/01/2012, 17h16
  4. une partie du code a disparu
    Par recup dans le forum Balisage (X)HTML et validation W3C
    Réponses: 9
    Dernier message: 08/03/2005, 10h08
  5. Indenter une partie du code
    Par KooX dans le forum Eclipse Java
    Réponses: 1
    Dernier message: 23/05/2004, 17h38

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